<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-08-15T23:44:06.674292" rpa="false" schemaversion="5">
<suite id="s1" name="netconf-scale-max-devices.txt">
<suite id="s1-s1" name="Ready" source="/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready">
<suite id="s1-s1-s1" name="Netconfready" source="/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/netconfready.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.306678" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:07.302162" elapsed="0.004583"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-15T23:44:07.301663" elapsed="0.005184"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.312218" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-08-15T23:44:07.308292" elapsed="0.003961"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-15T23:44:07.312499" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:07.312366" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:07.312333" elapsed="0.000245"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.313186" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:07.312757" elapsed="0.000478"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.313753" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-08-15T23:44:07.313412" elapsed="0.000372"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-15T23:44:07.314391" elapsed="0.000315"/>
</kw>
<msg time="2026-08-15T23:44:07.314834" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:07.314885" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:07.313980" elapsed="0.000929"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.315480" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:07.315082" elapsed="0.000427"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.317166" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:44:07.316882" elapsed="0.000313"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.317742" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:44:07.317345" elapsed="0.000426"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.318297" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.317948" elapsed="0.000377"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.321691" elapsed="0.000262"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.322466" level="INFO">${member_ip} = 10.30.170.145</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:07.322113" elapsed="0.000382"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.322654" elapsed="0.000304"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.323817" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:07.323481" elapsed="0.000365"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:44:07.323895" elapsed="0.000043"/>
</return>
<msg time="2026-08-15T23:44:07.324069" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:44:07.323168" elapsed="0.000926"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:07.324779" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.145:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7ca0cc6f7510&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-15T23:44:07.324326" elapsed="0.000644"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.325132" 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-08-15T23:44:07.321004" elapsed="0.004384"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:44:07.320790" elapsed="0.004644"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-15T23:44:07.318429" elapsed="0.007040"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.326154" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:07.325713" elapsed="0.000486"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.326841" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.145'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:07.326362" elapsed="0.000527"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.327450" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:07.327051" elapsed="0.000443"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-08-15T23:44:07.316369" elapsed="0.011185"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-08-15T23:44:07.307915" elapsed="0.019697"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:07.327827" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:07.327690" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:07.327668" elapsed="0.000233"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.331247" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:07.330858" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.331733" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:44:07.331431" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:44:07.331835" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:07.332005" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:44:07.330490" elapsed="0.001540"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:07.333055" level="INFO">${member_ip} = 10.30.170.145</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.332762" elapsed="0.000321"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:07.333951" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-15T23:44:07.338736" elapsed="0.000849"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.340542" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.145" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:07.339894" elapsed="0.000814"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:07.342890" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.341132" elapsed="0.001863"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.344493" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:44:07.344574" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:44:07.344125" elapsed="0.000474"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:07.344894" elapsed="0.000338"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:44:07.346164" level="INFO">Logging into '10.30.170.145:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:44:07.783280" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:43:32 UTC 2026

  System load:  0.07               Processes:             161
  Usage of /:   6.6% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.145
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-59795-54-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-08-15T23:44:07.345829" elapsed="0.437652"/>
</kw>
<msg time="2026-08-15T23:44:07.783588" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:07.345449" elapsed="0.438249"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:44:07.343366" elapsed="0.440626"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:44:07.784911" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-15T23:44:07.797724" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-15T23:44:07.798065" level="INFO">${stdout} = </msg>
<msg time="2026-08-15T23:44:07.798281" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:44:07.784386" elapsed="0.014137"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:07.799258" elapsed="0.001355"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.803682" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:07.802069" elapsed="0.002079"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-15T23:44:07.805367" elapsed="0.000083"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:07.804523" elapsed="0.001046"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:07.804401" elapsed="0.001390"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-15T23:44:07.806926" elapsed="0.000154"/>
</return>
<status status="PASS" start="2026-08-15T23:44:07.806187" elapsed="0.001002"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:07.806089" elapsed="0.001175"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-15T23:44:07.807362" elapsed="0.000018"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:07.811167" elapsed="0.000419"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.811873" elapsed="0.000249"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:07.812369" elapsed="0.000167"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:07.808014" elapsed="0.004606"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-08-15T23:44:07.336039" elapsed="0.476892"/>
</kw>
<msg time="2026-08-15T23:44:07.813078" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:07.335324" elapsed="0.477817"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-15T23:44:07.334835" elapsed="0.478392"/>
</kw>
<msg time="2026-08-15T23:44:07.813270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:07.334245" elapsed="0.479074"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:07.816103" elapsed="0.000339"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.816611" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:07.817048" elapsed="0.000112"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:07.813611" elapsed="0.003610"/>
</kw>
<msg time="2026-08-15T23:44:07.817321" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-08-15T23:44:07.333303" elapsed="0.484044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.817784" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:07.817524" elapsed="0.000325"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:44:07.817907" elapsed="0.000050"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-08-15T23:44:07.332392" elapsed="0.485684"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:44:07.332217" elapsed="0.485899"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:44:07.332084" elapsed="0.486072"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-08-15T23:44:07.328125" elapsed="0.490100"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-08-15T23:44:07.818387" elapsed="0.000218"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:07.832490" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:07.832368" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:07.832348" elapsed="0.000213"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:07.832874" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-15T23:44:07.832712" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.833422" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:07.833154" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:07.833866" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:07.833612" elapsed="0.000298"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:07.834692" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-08-15T23:44:07.834414" elapsed="0.000509">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-15T23:44:07.835040" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-15T23:44:07.835086" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:07.834061" elapsed="0.001047"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:07.835411" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:07.835185" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:07.835166" elapsed="0.000346"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:07.836282" level="INFO">${ip_address} = 10.30.170.145</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.836014" elapsed="0.000295"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-15T23:44:07.836356" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:07.836515" level="INFO">${odl_ip} = 10.30.170.145</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-15T23:44:07.835717" elapsed="0.000822"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.836694" elapsed="0.000433"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:07.837405" level="INFO">index=4
host=10.30.170.145
alias=None
port=8101
timeout=10 seconds
newline=

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

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

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-08-15T23:44:07.840313" elapsed="0.730311"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:08.574170" elapsed="0.000416"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.574747" elapsed="0.000205"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:08.575130" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:08.571847" elapsed="0.003446"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:44:08.571095" elapsed="0.004245"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-08-15T23:44:07.832087" elapsed="0.743304"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:44:07.819467" elapsed="0.755970"/>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:07.819068" elapsed="0.756419"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:44:07.818898" elapsed="0.756628"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-15T23:44:07.818708" elapsed="0.756862"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-15T23:44:07.307244" elapsed="1.268393"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:08.578347" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:08.578215" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.578187" elapsed="0.000234"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:08.583277" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:08.583156" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.583138" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.584316" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:08.583912" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.584812" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:44:08.584499" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:44:08.584885" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:08.585047" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:44:08.583566" elapsed="0.001505"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:08.590731" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:08.590620" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.590601" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:08.592204" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:08.592013" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.591995" elapsed="0.000359"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:08.592946" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.592502" elapsed="0.000547"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:08.593558" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:44:08.593305" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:44:08.688948" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:44:08.595236" elapsed="0.093861"/>
</kw>
<msg time="2026-08-15T23:44:08.689265" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:44:08.689338" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.593851" elapsed="0.095539"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:44:08.801652" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "r "e "a "d "y "/ "n "[78Ce "[A[78Ct
 "c "o "n "f "r "e "a "d "y ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:44:08.691035" elapsed="0.110841"/>
</kw>
<msg time="2026-08-15T23:44:08.802057" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:44:08.802133" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.689653" elapsed="0.112537"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:08.802721" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:08.802368" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.802339" elapsed="0.000582"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.803647" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "r "e "a "d "y "/ "n "[78Ce "[A[78Ct
 "c "o "n "f "r "e "a "d "y ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:08.803064" elapsed="0.000700"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:08.804230" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:08.803918" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.803897" elapsed="0.000504"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:44:08.804436" elapsed="0.000033"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:08.806372" elapsed="0.000318"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.806967" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:08.807375" elapsed="0.000106"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:08.805678" elapsed="0.001923"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:44:08.804728" elapsed="0.002970"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:44:08.591631" elapsed="0.216251"/>
</kw>
<msg time="2026-08-15T23:44:08.807982" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:08.808027" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.590971" elapsed="0.217094"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:44:08.808254" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:08.808141" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.808122" elapsed="0.000216"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:08.808778" elapsed="0.000042"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:08.809193" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:44:08.809309" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:44:08.590324" elapsed="0.219097"/>
</kw>
<msg time="2026-08-15T23:44:08.809516" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:08.809561" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.585466" elapsed="0.224132"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:08.809954" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:08.809673" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.809656" elapsed="0.000377"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:44:08.585324" elapsed="0.224732"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:44:08.585131" elapsed="0.224959"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:44:08.582837" elapsed="0.227308"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-15T23:44:08.576246" elapsed="0.233960"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.575791" elapsed="0.234463"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-08-15T23:44:07.301295" elapsed="1.509010"/>
</kw>
<kw name="Set_Netconf_Connector">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.811044" level="INFO">${streamconnector} = /node/controller-config/yang-ext:mount/config:modules/module/sal-restconf-service:json-restconf-service-impl/json-restconf-service-impl</msg>
<var>${streamconnector}</var>
<arg>/node/controller-config/yang-ext:mount/config:modules/module/sal-restconf-service:json-restconf-service-impl/json-restconf-service-impl</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:08.810756" elapsed="0.000316"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.813583" level="INFO">${connector} = </msg>
<var>${connector}</var>
<arg>${USE_NETCONF_CONNECTOR}</arg>
<arg>${streamconnector}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:08.811245" elapsed="0.002365"/>
</kw>
<return>
<value>${connector}</value>
<status status="PASS" start="2026-08-15T23:44:08.813664" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:08.813832" level="INFO">${connector} = </msg>
<var>${connector}</var>
<doc>Sets netconf connector verify url according to the vanadium and False combination</doc>
<status status="PASS" start="2026-08-15T23:44:08.810527" elapsed="0.003332"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.818629" level="INFO">${netconf_connector} = </msg>
<arg>${netconf_connector}</arg>
<arg>${connector}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:08.814018" elapsed="0.004657"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>A workaround for EOF error follows. TODO: Create a test case for the EOF bug, possibly tagged "exclude".</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-08-15T23:44:08.818846" elapsed="0.000214"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:08.833595" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:08.833484" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.833464" elapsed="0.000199"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:08.833977" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-15T23:44:08.833834" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.834517" level="INFO">{1: 4}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:08.834259" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:08.834969" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:08.834708" elapsed="0.000304"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.835552" elapsed="0.000186"/>
</kw>
<msg time="2026-08-15T23:44:08.835855" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:08.835902" level="INFO">${old_connection_index} = 4</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.835166" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:44:08.836732" elapsed="0.000153"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:44:08.854023" level="INFO">logout</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:44:08.837372" elapsed="0.016745"/>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.837049" elapsed="0.017120"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:08.854662" elapsed="0.000219"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:08.854340" elapsed="0.000590"/>
</kw>
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-08-15T23:44:08.836218" elapsed="0.018756"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:08.835999" elapsed="0.019026"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:08.835981" elapsed="0.019071"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:08.855837" level="INFO">${ip_address} = 10.30.170.145</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.855544" elapsed="0.000321"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-15T23:44:08.855914" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:08.856065" level="INFO">${odl_ip} = 10.30.170.145</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-15T23:44:08.855273" elapsed="0.000817"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.856240" elapsed="0.000405"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:08.856936" level="INFO">index=7
host=10.30.170.145
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-15T23:44:08.857036" level="INFO">${karaf_connection_object} = index=7
host=10.30.170.145
alias=None
port=8101
timeout=10 seconds
newline=

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

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-08-15T23:44:08.859746" elapsed="0.191499"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.054732" elapsed="0.000325"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:09.055214" elapsed="0.000189"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:09.055549" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:09.052389" elapsed="0.003315"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:44:09.051679" elapsed="0.004070"/>
</kw>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-08-15T23:44:08.831751" elapsed="0.224062"/>
</kw>
<arg>2x</arg>
<arg>1s</arg>
<arg>KarafKeywords.Open_Controller_Karaf_Console_On_Background</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:44:08.819238" elapsed="0.236622"/>
</kw>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:09.062440" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:09.062322" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.062299" elapsed="0.000215"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.063499" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:09.063083" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.064067" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:44:09.063750" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:44:09.064140" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:44:09.064303" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:44:09.062741" elapsed="0.001586"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:09.070175" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:09.070059" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.070037" elapsed="0.000209"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:09.071312" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:09.071204" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.071186" elapsed="0.000212"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:09.071786" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:09.071557" elapsed="0.000272"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.072158" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:44:09.071984" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.164686" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "N "e "t "c "o "n "f "[C "r "e "a "d "i "n "e "s "s "[C "t "e "s "t "[78C[C "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:44:09.072666" elapsed="0.092110"/>
</kw>
<msg time="2026-08-15T23:44:09.164901" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:44:09.164947" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "N "e "t "c "o "n "f "[C "r "e "a "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:09.072336" elapsed="0.092650"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.168456" level="INFO">"u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:44:09.165519" elapsed="0.003001"/>
</kw>
<msg time="2026-08-15T23:44:09.168618" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:44:09.168662" level="INFO">${message_wait} =  "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:09.165170" elapsed="0.003521"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:09.169009" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:09.168766" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.168746" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.169492" level="INFO"> "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:09.169238" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:09.169836" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:09.169609" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.169591" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:44:09.169949" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.171059" elapsed="0.000425"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:09.171643" elapsed="0.000179"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:09.171970" elapsed="0.000101"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:09.170726" elapsed="0.001405"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:44:09.170218" elapsed="0.001962"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:44:09.070951" elapsed="0.101325"/>
</kw>
<msg time="2026-08-15T23:44:09.172420" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:09.172464" level="INFO">${message} =  "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:09.070403" elapsed="0.102091"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:44:09.172679" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:44:09.172571" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.172552" elapsed="0.000212"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:09.173187" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:09.173521" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:44:09.173593" elapsed="0.000023"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:44:09.069740" elapsed="0.103969"/>
</kw>
<msg time="2026-08-15T23:44:09.173829" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:09.173877" level="INFO">${output} =  "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:09.064718" elapsed="0.109189"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:09.174249" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:09.173982" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.173965" elapsed="0.000364"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:44:09.064576" elapsed="0.109775"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:44:09.064388" elapsed="0.109998"/>
</for>
<arg>Starting Netconf readiness test suite</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:44:09.060333" elapsed="0.114110"/>
</kw>
<if>
<branch type="IF" condition="${DEBUG_LOGGING_FOR_EVERYTHING}">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set DEBUG</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:09.174926" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:09.174507" elapsed="0.000479"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.174490" elapsed="0.000520"/>
</if>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:09.175459" level="INFO">Creating Session using : alias=ses, url=http://10.30.170.145:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7ca0ca872810&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>ses</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-15T23:44:09.175157" elapsed="0.000519"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.176510" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:09.176218" elapsed="0.000319"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.180814" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:44:09.176699" elapsed="0.004164"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:09.185263" level="INFO">Creating Session using : alias=default, url=http://10.30.170.145:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7ca0ca888790&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-15T23:44:09.184885" elapsed="0.000514"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-15T23:44:09.184425" elapsed="0.001046"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:09.180936" elapsed="0.004566"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.180918" elapsed="0.004612"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.190720" level="INFO">${odl_connection} = 10</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:09.190338" elapsed="0.000409"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.192472" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:44:09.192552" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:44:09.192179" elapsed="0.000437"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.192777" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.193980" level="INFO">Logging into '10.30.170.145:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:44:09.539607" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:43:32 UTC 2026

  System load:  0.07               Processes:             161
  Usage of /:   6.6% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.170.145
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Aug 15 23:44:07 2026 from 10.30.171.53
[?2004h[jenkins@releng-59795-54-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-08-15T23:44:09.193640" elapsed="0.346086"/>
</kw>
<msg time="2026-08-15T23:44:09.539795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.193280" elapsed="0.346607"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:44:09.191715" elapsed="0.348268"/>
</kw>
<msg time="2026-08-15T23:44:09.540033" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.191280" elapsed="0.348799"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-15T23:44:09.190942" elapsed="0.349211"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-15T23:44:09.540198" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:44:09.540382" level="INFO">${odl} = 10</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-15T23:44:09.190042" elapsed="0.350366"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.547561" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-15T23:44:09.556373" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-15T23:44:09.540585" elapsed="0.015875"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:44:09.556680" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-15T23:44:09.557360" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:09.557171" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:09.557140" elapsed="0.000309"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.564350" level="INFO">${tools_connection} = 11</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:44:09.563820" elapsed="0.000566"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:44:09.566695" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:44:09.566827" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:44:09.566313" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.567078" elapsed="0.000440"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:44:09.568695" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:44:10.154143" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:43:31 UTC 2026

  System load:  0.09               Processes:             164
  Usage of /:   4.9% of 154.88GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-59795-54-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-08-15T23:44:09.568376" elapsed="0.585939"/>
</kw>
<msg time="2026-08-15T23:44:10.154400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.567786" elapsed="0.586699"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:44:09.565695" elapsed="0.588972"/>
</kw>
<msg time="2026-08-15T23:44:10.154719" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:09.565121" elapsed="0.589647"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-15T23:44:09.564641" elapsed="0.590219"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-15T23:44:10.154912" elapsed="0.000223"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-15T23:44:09.563308" elapsed="0.591950"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-15T23:44:09.185781" elapsed="0.969531"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-15T23:44:09.175949" elapsed="0.979411"/>
</kw>
<doc>Initialize SetupUtils. Setup requests library and log into karaf.log that the netconf readiness wait starts.</doc>
<status status="PASS" start="2026-08-15T23:44:07.300881" elapsed="2.854528"/>
</kw>
<test id="s1-s1-s1-t1" name="Check_Whether_Netconf_Topology_Is_Ready" line="84">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:44:10.158961" elapsed="0.000249"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:44:10.158675" elapsed="0.000591"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.160361" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:10.160223" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.160202" 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-08-15T23:44:10.165360" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:10.165253" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.165236" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.166443" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:10.166043" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.166943" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:44:10.166631" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:44:10.167015" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:10.167170" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:44:10.165652" elapsed="0.001543"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.172729" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:10.172615" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.172589" elapsed="0.000223"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.174048" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:10.173935" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.173917" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:10.174638" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.174256" elapsed="0.000409"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:44:10.175092" level="INFO">${current_connection_index} = 11</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:44:10.174837" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:44:10.233214" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:44:10.175651" elapsed="0.057733"/>
</kw>
<msg time="2026-08-15T23:44:10.233555" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:44:10.233600" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:10.175270" elapsed="0.058368"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:44:10.283220" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "T "o "p "o "l "o "g "y "_ "I "s "_ "R "e "a "d "y "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:44:10.234344" elapsed="0.049094"/>
</kw>
<msg time="2026-08-15T23:44:10.283607" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:44:10.283653" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:10.233831" elapsed="0.049860"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.284041" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.283768" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.283748" elapsed="0.000397"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.284653" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "T "o "p "o "l "o "g "y "_ "I "s "_ "R "e "a "d "y "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.284282" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.285024" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.284794" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.284776" elapsed="0.000348"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:44:10.285157" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:44:10.288174" elapsed="0.000145"/>
</kw>
<msg time="2026-08-15T23:44:10.288389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:10.287501" elapsed="0.000987"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.289417" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.290372" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:44:10.286021" elapsed="0.004464"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:44:10.285421" elapsed="0.005180"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:44:10.173604" elapsed="0.117094"/>
</kw>
<msg time="2026-08-15T23:44:10.290790" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:10.291018" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:10.172964" elapsed="0.118093"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:44:10.291241" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:10.291133" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.291115" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.291715" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.292079" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.292157" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:44:10.172270" elapsed="0.119993"/>
</kw>
<msg time="2026-08-15T23:44:10.292357" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:44:10.292402" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:10.167575" elapsed="0.124864"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.292761" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.292513" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.292496" elapsed="0.000411"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:44:10.167435" elapsed="0.125495"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:44:10.167253" elapsed="0.125708"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:44:10.164897" elapsed="0.128118"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:44:10.159885" elapsed="0.133219"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:44:10.159416" elapsed="0.133735"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:44:10.156203" elapsed="0.137007"/>
</kw>
<kw name="Pass Execution If" owner="BuiltIn">
<arg>${USE_NETCONF_CONNECTOR}==${True}</arg>
<arg>Netconf connector is used. Next testcases do their job in this case.</arg>
<doc>Conditionally skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="PASS" start="2026-08-15T23:44:10.293379" elapsed="0.000339"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.295867" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:10.295549" elapsed="0.000345"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:44:10.295941" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:10.296120" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:44:10.295200" elapsed="0.000945"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:10.318020" elapsed="0.000865"/>
</kw>
<msg time="2026-08-15T23:44:10.319020" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:10.317584" elapsed="0.001491"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:10.317197" elapsed="0.001954"/>
</kw>
<msg time="2026-08-15T23:44:10.319194" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:10.308503" elapsed="0.010737"/>
</kw>
<msg time="2026-08-15T23:44:10.319343" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:10.308179" elapsed="0.011189"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.320312" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.319530" elapsed="0.000811"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.320746" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.320429" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.355179" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:10.354779" elapsed="0.000429"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:10.356158" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.355754" elapsed="0.000490">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:10.356347" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:10.355420" elapsed="0.000952"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.357011" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:10.356588" elapsed="0.000451"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:10.357428" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:10.357586" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:10.357285" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.358089" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.357839" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.359197" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.358935" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.359665" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.359399" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.360413" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.360104" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.361246" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.360958" elapsed="0.000315"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.361324" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:10.361478" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.360621" elapsed="0.000882"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.361650" elapsed="0.000262"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:44:10.359958" elapsed="0.001995"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.362491" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.362194" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.363232" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.363022" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.363308" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:10.363459" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.362696" elapsed="0.000788"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.363630" elapsed="0.000238"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:10.362066" elapsed="0.001843"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.364492" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.364191" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.365382" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.365027" elapsed="0.000381"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.365458" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:10.365607" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.364699" elapsed="0.000933"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.365778" elapsed="0.000400"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:44:10.364023" elapsed="0.002195"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.366767" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.366467" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.367506" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.367298" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.367581" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:10.367729" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.366989" elapsed="0.000767"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.367951" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:44:10.366337" elapsed="0.001902"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.368781" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.368484" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.369532" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.369316" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.369608" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:10.369755" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.369004" elapsed="0.000776"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.369942" elapsed="0.000273"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:44:10.368355" elapsed="0.001900"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.370792" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.370496" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.371534" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.371328" elapsed="0.000232"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.371609" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:10.371755" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.371012" elapsed="0.000768"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.371942" elapsed="0.000275"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:44:10.370368" elapsed="0.001890"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.372825" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.372506" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.373557" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.373350" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.373632" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:10.373781" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.373031" elapsed="0.000790"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.373968" elapsed="0.000226"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:44:10.372378" elapsed="0.001856"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.374769" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:10.374472" elapsed="0.000336"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:10.375515" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.375304" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:10.375589" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:10.375737" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:10.374991" elapsed="0.000771"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.375927" elapsed="0.000241"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:10.374345" elapsed="0.001863"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:10.359746" elapsed="0.016497"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:10.376289" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:44:10.376447" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:10.358558" elapsed="0.017916"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:10.358255" elapsed="0.018251"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.376676" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.376530" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.358233" elapsed="0.018520"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.380867" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:10.377002" elapsed="0.003896"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:10.381000" elapsed="0.000061"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:10.353774" elapsed="0.027554"/>
</kw>
<msg time="2026-08-15T23:44:10.381422" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:10.339165" elapsed="0.042355"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.406517" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.428536" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.450531" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.450770" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.450979" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.451551" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.451282" elapsed="0.000351"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:10.451267" elapsed="0.000452"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.451941" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.452301" elapsed="0.000046"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.452627" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:10.451237" elapsed="0.001558"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.451104" elapsed="0.001773"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.453026" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.453179" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:44:10.453302" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:10.334719" elapsed="0.118609"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.481318" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:10.480945" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:10.482128" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.481901" elapsed="0.000305">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:10.482299" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:10.481554" elapsed="0.000769"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.482943" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:10.482532" elapsed="0.000439"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:10.483316" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:10.483457" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:10.483176" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.483992" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.483687" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:44:10.484498" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.484203" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.485049" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:10.484726" elapsed="0.000351"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:10.484583" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.484172" elapsed="0.000962"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.486035" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:10.485327" elapsed="0.000739"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:10.486164" elapsed="0.000053"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:10.479928" elapsed="0.006514"/>
</kw>
<msg time="2026-08-15T23:44:10.486531" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:10.466493" elapsed="0.020133"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.509235" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.531321" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.554228" 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-08-15T23:44:10.554531" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.554733" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.555339" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.555076" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:10.555061" elapsed="0.000447"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.555708" elapsed="0.000044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.556050" elapsed="0.000045"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.556419" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:10.555029" elapsed="0.001555"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.554886" elapsed="0.001758"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.556791" elapsed="0.000044"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:10.556966" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:44:10.557106" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:10.463657" elapsed="0.093481"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:10.559786" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.559187" elapsed="0.000853">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:10.560196" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:10.557903" elapsed="0.002320"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:10.560698" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:10.560344" elapsed="0.000525"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.562082" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:10.561349" elapsed="0.000775"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:10.560898" elapsed="0.001307"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.560324" elapsed="0.001905"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.565160" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:10.562384" elapsed="0.002804"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:10.565389" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:44:10.565552" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:10.557525" elapsed="0.008053"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.567463" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.566976" elapsed="0.000551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.568203" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.567692" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.569187" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.568440" elapsed="0.000811"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.569921" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.569416" elapsed="0.000566"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:10.571529" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:44:10.570926" elapsed="0.000704"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:44:10.572544" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:44:10.571961" elapsed="0.000684"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:10.572940" elapsed="0.000496"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:10.574421" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:10.573705" elapsed="0.000916"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:44:10.574711" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:10.575060" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:44:10.570196" elapsed="0.004891"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:11.405057" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:44:11.405221" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Set-Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 14-Aug-2026 23:44:11 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:11.405568" 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-08-15T23:44:10.583755" elapsed="0.821913"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:10.575197" elapsed="0.830853"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.406641" elapsed="0.000226"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.406134" elapsed="0.001053"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.575178" elapsed="0.832069"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.416029" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:11.411586" elapsed="0.004537"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:11.410398" elapsed="0.005792"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.410316" elapsed="0.005973"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.420514" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:11.417106" elapsed="0.003552"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:11.416409" elapsed="0.004329"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.416367" elapsed="0.004498"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.422638" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:11.421577" elapsed="0.001161"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.423379" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.422894" elapsed="0.000582"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.424368" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:11.423907" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:11.423545" elapsed="0.000909"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.422860" elapsed="0.001662"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.426199" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:11.425055" elapsed="0.001242"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.426923" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.426427" elapsed="0.000592"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.427926" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:11.427427" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:11.427087" elapsed="0.000926"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.426394" elapsed="0.001684"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:11.428333" elapsed="0.000867"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:44:11.430319" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:11.429472" elapsed="0.000949"/>
</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-08-15T23:44:11.430689" elapsed="0.002992"/>
</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-08-15T23:44:11.408443" elapsed="0.025349"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:44:11.434048" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-08-15T23:44:11.433896" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.433875" elapsed="0.000322"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.434345" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.434454" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:11.436830" 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-08-15T23:44:10.566056" elapsed="0.870804"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:44:11.436926" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:11.437082" 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-08-15T23:44:10.323758" elapsed="1.113349"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.437443" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.437205" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.437188" elapsed="0.000349"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:44:11.437568" elapsed="0.000026"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:44:10.321089" elapsed="1.116601"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:10.320858" elapsed="1.116876"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:10.320410" elapsed="1.117346"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.437952" elapsed="0.000245"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:44:10.296846" elapsed="1.141452"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:44:10.296269" elapsed="1.142099"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.439023" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.438535" elapsed="0.000517"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:11.457595" elapsed="0.000781"/>
</kw>
<msg time="2026-08-15T23:44:11.458429" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:11.457237" elapsed="0.001247"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:11.456849" elapsed="0.001714"/>
</kw>
<msg time="2026-08-15T23:44:11.458606" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:11.448179" elapsed="0.010471"/>
</kw>
<msg time="2026-08-15T23:44:11.458751" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:11.447860" elapsed="0.010915"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.507583" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:11.507005" elapsed="0.000627"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:11.508719" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.508430" elapsed="0.000396">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:11.509026" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:11.507992" elapsed="0.001078"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.510126" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:11.509413" elapsed="0.000760"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:11.510751" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:11.511024" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:11.510505" elapsed="0.000565"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.511754" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:11.511402" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.513076" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:11.512815" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.513542" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.513277" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.514309" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:11.514010" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:11.515077" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.514861" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:11.515188" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:11.515344" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:11.514528" elapsed="0.000842"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.515520" elapsed="0.000228"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:11.513874" elapsed="0.001916"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.516369" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:11.516069" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:11.517138" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.516927" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:11.517215" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:11.517366" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:11.516577" elapsed="0.000818"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:11.517542" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:11.515938" elapsed="0.001880"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:11.513621" elapsed="0.004234"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:11.517899" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:11.518056" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:11.512446" elapsed="0.005636"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:11.512056" elapsed="0.006084"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.518407" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.518199" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.512014" elapsed="0.006525"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.519823" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:11.518861" elapsed="0.001012"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:11.520004" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:11.505417" elapsed="0.014819"/>
</kw>
<msg time="2026-08-15T23:44:11.520403" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:11.491150" elapsed="0.029311"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.533303" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.545877" elapsed="0.000027"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.558377" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.558601" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.558774" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.559325" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.559109" elapsed="0.000358"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:11.559094" elapsed="0.000449"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.559718" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.560053" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.560399" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:11.559064" elapsed="0.001528"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.558867" elapsed="0.001754"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.560818" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.560897" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:11.561017" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:11.486903" elapsed="0.074140"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:11.562621" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.562239" elapsed="0.000610">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:11.563027" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:11.561723" elapsed="0.001329"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.563366" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.563122" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.564204" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:11.563693" elapsed="0.000552"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:11.563530" elapsed="0.000821"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.563104" elapsed="0.001271"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.570975" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:11.564524" elapsed="0.006478"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:11.571055" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:11.571208" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:11.561401" elapsed="0.009832"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:11.572837" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.572418" elapsed="0.000622">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:11.573220" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:11.571920" elapsed="0.001325"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:11.573451" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:11.573315" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:11.573297" elapsed="0.000282"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.573729" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.573969" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.574037" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:11.576128" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:11.571554" elapsed="0.004601"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.577858" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:11.577382" elapsed="0.000523"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:11.578509" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:11.578053" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:11.615729" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:11.617760" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:11.618230" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.580951" elapsed="0.039602">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:11.578621" elapsed="0.042488">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.621487" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.621193" elapsed="0.000533"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:11.578603" elapsed="0.043163">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.622447" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.622640" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:11.622584" elapsed="0.000123"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:11.622560" elapsed="0.000178"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.622966" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.623073" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.576513" elapsed="0.046725">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.623346" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.463981" elapsed="0.159506">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:11.623896" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:11.623615" elapsed="0.000430"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:11.623592" elapsed="0.000489"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:11.624128" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.459566" elapsed="0.164708">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.680044" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:14.679406" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:14.681219" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.680925" elapsed="0.000376">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:14.681497" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:14.680461" elapsed="0.001082"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.682539" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:14.681905" elapsed="0.000682"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:14.683201" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:14.683464" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:14.682946" elapsed="0.000563"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.684220" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:14.683862" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.685469" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:14.685213" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.685974" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:14.685669" elapsed="0.000331"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.686699" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:14.686369" elapsed="0.000356"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:14.687595" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:14.687364" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:14.687688" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:14.687871" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:14.687035" elapsed="0.000861"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:14.688046" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:14.686236" elapsed="0.002093"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.688885" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:14.688573" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:14.689618" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:14.689410" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:14.689693" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:14.689960" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:14.689091" 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-08-15T23:44:14.690137" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:14.688444" elapsed="0.001978"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:14.686055" elapsed="0.004403"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:14.690504" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:14.690668" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:14.684890" elapsed="0.005804"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:14.684469" elapsed="0.006286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.691060" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:14.690831" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:14.684424" elapsed="0.006770"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.692548" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:14.691491" elapsed="0.001105"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:14.692727" elapsed="0.000090"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:14.677742" elapsed="0.015241"/>
</kw>
<msg time="2026-08-15T23:44:14.693152" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:14.663411" elapsed="0.029795"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.706212" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.726296" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.739506" elapsed="0.000037"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.739726" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.739930" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.740427" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:14.740211" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:14.740195" elapsed="0.000453"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.740845" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.741206" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.741576" elapsed="0.000024"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:14.740161" elapsed="0.001617"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:14.740012" elapsed="0.001812"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.741974" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:14.742050" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:14.742189" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:14.659129" elapsed="0.083093"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:14.743928" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.743487" elapsed="0.000645">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:14.744313" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:14.742960" elapsed="0.001378"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.744666" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:14.744409" elapsed="0.000424"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.745532" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:14.745041" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:14.744863" elapsed="0.000817"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:14.744391" elapsed="0.001314"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.752087" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:14.745870" elapsed="0.006244"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:14.752165" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:14.752319" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:14.742603" elapsed="0.009741"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:14.754004" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.753620" elapsed="0.000567">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:14.754365" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:14.753137" elapsed="0.001253"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:14.754626" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:44:14.754490" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:14.754470" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.754867" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:14.755035" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:14.755100" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:14.758402" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:14.752669" elapsed="0.005773"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.760154" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:14.759662" elapsed="0.000540"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:14.760866" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:14.760351" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:15.063520" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:15.064195" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:15.064685" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.763258" elapsed="0.302579">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:14.760982" elapsed="0.305326">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:15.066872" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:15.066401" elapsed="0.000868"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:14.760963" elapsed="0.306369">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:15.068484" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:15.068886" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:15.068716" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:15.068675" elapsed="0.000363"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:15.069364" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:15.069524" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.758816" elapsed="0.310965">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:15.069985" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.634531" elapsed="0.435678">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:15.070901" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:15.070413" elapsed="0.000656"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:15.070374" elapsed="0.000750"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:15.071197" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:14.625392" elapsed="0.446037">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.126101" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:18.125477" elapsed="0.000677"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:18.127241" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.126967" elapsed="0.000356">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:18.127519" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:18.126500" elapsed="0.001063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.128557" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:18.127927" elapsed="0.000678"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:18.129345" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:18.129635" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:18.129076" elapsed="0.000606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.130394" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:18.130033" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.131692" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:18.131432" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.132197" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:18.131916" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.133001" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:18.132615" elapsed="0.000412"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:18.133753" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:18.133528" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:18.133847" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:44:18.134009" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:18.133211" elapsed="0.000823"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:18.134186" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:18.132481" elapsed="0.001987"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.135043" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:18.134722" elapsed="0.000348"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:18.135776" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:18.135567" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:18.135876" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:18.136027" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:18.135251" elapsed="0.000801"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:18.136200" elapsed="0.000240"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:18.134590" elapsed="0.001891"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:18.132302" elapsed="0.004215"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:18.136561" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:44:18.136719" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:18.131103" elapsed="0.005646"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:18.130648" elapsed="0.006180"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.137101" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:18.136892" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:18.130602" elapsed="0.006669"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.138374" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:18.137568" elapsed="0.000855"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:18.138556" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:18.123890" elapsed="0.014899"/>
</kw>
<msg time="2026-08-15T23:44:18.138983" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:18.109357" elapsed="0.029681"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.152006" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.164619" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.177405" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.177599" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.177771" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.178256" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:18.178044" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:18.178029" elapsed="0.000448"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.178651" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.178996" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.179344" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:18.177998" elapsed="0.001680"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.177864" elapsed="0.001842"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.179869" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.179946" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:18.180067" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:18.104708" elapsed="0.075416"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:18.181730" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.181355" elapsed="0.000625">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:18.182158" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:18.180858" elapsed="0.001326"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.182503" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:18.182257" elapsed="0.000383"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.183390" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:18.182902" elapsed="0.000528"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:18.182668" elapsed="0.000869"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:18.182238" elapsed="0.001324"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.190183" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:18.183715" elapsed="0.006497"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:18.190267" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:18.190426" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:18.180509" elapsed="0.009943"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:18.192139" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.191688" elapsed="0.000651">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:18.192520" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:18.191198" elapsed="0.001347"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:18.192756" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:44:18.192617" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:18.192598" elapsed="0.000264"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.193006" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.193173" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.193240" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:18.195435" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:18.190815" elapsed="0.004648"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.197293" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:18.196793" elapsed="0.000549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:18.197975" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:18.197495" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:18.323217" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:18.323657" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:18.324087" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.200353" elapsed="0.124390">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:18.198092" elapsed="0.126970">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.325370" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:18.325119" elapsed="0.000501"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:18.198072" elapsed="0.127589">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.326419" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.326625" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:18.326568" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:18.326542" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.326954" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.327059" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.195899" elapsed="0.131321">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.327331" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.080613" elapsed="0.246867">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:18.327932" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:18.327609" elapsed="0.000429"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:18.327584" elapsed="0.000490"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:18.328120" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:18.072550" elapsed="0.255716">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.382940" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:21.382290" elapsed="0.000706"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:21.384124" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.383836" elapsed="0.000368">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:21.384405" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:21.383355" elapsed="0.001098"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.385443" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:21.384825" elapsed="0.000667"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:21.386395" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:21.386654" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:21.386131" elapsed="0.000570"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.387414" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:21.387050" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.388710" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:21.388443" elapsed="0.000318"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.389224" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:21.388940" elapsed="0.000311"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.390068" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:21.389648" elapsed="0.000447"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:21.390883" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:21.390628" elapsed="0.000283"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:21.390968" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:21.391136" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:21.390292" elapsed="0.000869"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:21.391319" elapsed="0.000255"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:21.389505" elapsed="0.002110"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.392200" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:21.391886" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:21.392983" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:21.392740" elapsed="0.000271"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:21.393062" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:21.393213" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:21.392418" 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-08-15T23:44:21.393391" elapsed="0.000236"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:21.391733" elapsed="0.001936"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:21.389309" elapsed="0.004396"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:21.393752" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:21.393931" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:21.388115" elapsed="0.005843"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:21.387666" elapsed="0.006370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.394314" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:21.394101" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:21.387621" elapsed="0.006829"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.395761" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:21.394758" elapsed="0.001069"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:21.395963" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:21.380661" elapsed="0.015537"/>
</kw>
<msg time="2026-08-15T23:44:21.396367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:21.366204" elapsed="0.030218"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.409194" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.421937" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.434596" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.434844" elapsed="0.000028"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.435030" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.435513" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:21.435294" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:21.435278" elapsed="0.000474"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.435966" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.436284" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.436657" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:21.435247" elapsed="0.001645"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.435108" elapsed="0.001839"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.437106" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.437185" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:21.437308" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:21.361751" elapsed="0.075583"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:21.439447" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.439008" elapsed="0.000648">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:21.439920" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:21.438267" elapsed="0.001685"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.440376" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:21.440033" elapsed="0.000507"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.441448" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:21.440782" elapsed="0.000711"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:21.440573" elapsed="0.001062"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:21.440012" elapsed="0.001652"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.449233" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:21.441940" elapsed="0.007321"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:21.449316" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:21.449478" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:21.437793" elapsed="0.011710"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:21.451221" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.450754" elapsed="0.000658">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:21.451598" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:21.450234" elapsed="0.001389"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:21.451872" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-08-15T23:44:21.451709" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:21.451679" elapsed="0.000284"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.452109" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.452277" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.452343" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:21.454709" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:21.449864" elapsed="0.004876"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.456643" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:21.456095" elapsed="0.000610"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:21.457470" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:21.456919" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:21.611785" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:21.612562" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:21.613168" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.460060" elapsed="0.154285">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:21.457588" elapsed="0.157338">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.615486" elapsed="0.000072"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:21.615028" elapsed="0.001056"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:21.457568" elapsed="0.158589">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.617454" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.617851" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:21.617697" elapsed="0.000264"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:21.617650" elapsed="0.000362"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.618398" elapsed="0.000056"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.618571" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.455182" elapsed="0.163704">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.618976" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.338089" elapsed="0.280992">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:21.619367" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:21.619177" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:21.619160" elapsed="0.000304"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:21.619498" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:21.329446" elapsed="0.290154">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.675403" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:24.674722" elapsed="0.000739"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:24.676605" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.676318" elapsed="0.000372">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:24.676928" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:24.675824" elapsed="0.001151"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.678093" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:24.677338" elapsed="0.000837"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:24.678808" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:24.679103" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:24.678535" elapsed="0.000615"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.679918" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:24.679499" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.681234" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:24.680965" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.681800" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:24.681516" elapsed="0.000313"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.682680" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:24.682353" elapsed="0.000354"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:24.683498" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:24.683253" elapsed="0.000274"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:24.683581" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:24.683750" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:24.682918" elapsed="0.000857"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:24.683949" elapsed="0.000248"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:24.682173" elapsed="0.002065"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.684801" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:24.684488" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:24.685592" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:24.685368" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:24.685672" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:24.685830" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:24.685027" elapsed="0.000845"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:24.686023" elapsed="0.000233"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:24.684356" elapsed="0.001941"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:24.681985" elapsed="0.004348"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:24.686378" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:24.686564" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:24.680606" elapsed="0.005985"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:24.680185" elapsed="0.006472"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.686969" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:24.686722" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:24.680139" elapsed="0.006968"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.688418" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:24.687409" elapsed="0.001058"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:24.688602" elapsed="0.000077"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:24.673039" elapsed="0.015844"/>
</kw>
<msg time="2026-08-15T23:44:24.689058" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:24.658426" elapsed="0.030687"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.702034" elapsed="0.000040"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.714628" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.727244" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.727443" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.727622" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.728160" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:24.727942" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:24.727927" elapsed="0.000451"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.728553" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.728886" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.729232" elapsed="0.000025"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:24.727893" elapsed="0.001534"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.727700" elapsed="0.001755"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.729599" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.729675" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:24.729799" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:24.654029" elapsed="0.075797"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:24.731427" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.731052" elapsed="0.000561">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:24.731792" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:24.730531" elapsed="0.001291"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.732197" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:24.731919" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.733093" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:24.732542" elapsed="0.000592"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:24.732364" elapsed="0.000879"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:24.731899" elapsed="0.001369"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.739765" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:24.733418" elapsed="0.006375"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:24.739894" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:24.740054" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:24.730198" elapsed="0.009882"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:24.741720" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.741343" elapsed="0.000655">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:24.742179" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:24.740802" elapsed="0.001403"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:24.742419" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:44:24.742276" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:24.742258" elapsed="0.000244"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.742646" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.742816" elapsed="0.000036"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.742899" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:24.745051" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:24.740478" elapsed="0.004600"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.746740" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:24.746280" elapsed="0.000626"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:24.747524" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:24.747062" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:24.878058" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:24.878647" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:24.879064" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.749888" elapsed="0.130237">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:24.747637" elapsed="0.133071">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.881267" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:24.880803" elapsed="0.000855"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:24.747619" elapsed="0.134102">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.882568" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.882760" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:24.882706" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:24.882682" elapsed="0.000261"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.883148" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.883244" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.745444" elapsed="0.137955">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.883564" elapsed="0.000028"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.629597" elapsed="0.254116">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:24.884136" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:24.883884" elapsed="0.000353"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:24.883821" elapsed="0.000450"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:24.884316" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:24.621119" elapsed="0.263337">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.941105" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:27.940461" elapsed="0.000741"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:27.942365" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:27.942056" elapsed="0.000392">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:27.942650" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:27.941562" elapsed="0.001141"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.943723" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:27.943115" elapsed="0.000663"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:27.944475" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:27.944754" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:27.944219" elapsed="0.000594"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.945565" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:27.945171" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.946910" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:27.946622" elapsed="0.000335"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.947400" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:27.947121" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.948137" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:27.947801" elapsed="0.000362"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:27.949002" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:27.948677" elapsed="0.000353"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:27.949083" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:27.949258" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:27.948349" elapsed="0.000934"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:27.949556" elapsed="0.000250"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:27.947663" elapsed="0.002204"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.950425" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:27.950127" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:27.951186" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:27.950968" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:27.951263" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:27.951413" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:27.950632" elapsed="0.000807"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:27.951588" elapsed="0.000253"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:27.949995" elapsed="0.001888"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:27.947481" elapsed="0.004583"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:27.952111" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:27.952272" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:27.946291" elapsed="0.006006"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:27.945879" elapsed="0.006476"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.952631" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:27.952416" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:27.945777" elapsed="0.006987"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:27.954115" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:27.953104" elapsed="0.001065"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:27.954303" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:27.938881" elapsed="0.015656"/>
</kw>
<msg time="2026-08-15T23:44:27.954707" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:27.924393" elapsed="0.030368"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.967713" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.982193" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.996328" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.996560" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.996743" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.997249" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:27.997030" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:27.997014" elapsed="0.000458"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.997650" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.997995" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.998346" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:27.996983" elapsed="0.001828"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:27.996842" elapsed="0.002101"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:27.999313" elapsed="0.000052"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:27.999492" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:27.999766" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:27.920104" elapsed="0.079761"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:28.003630" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:28.002961" elapsed="0.000999">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:28.004235" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:28.001452" elapsed="0.002823"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.004752" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:28.004383" elapsed="0.000619"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:28.006104" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:28.005313" elapsed="0.000852"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:28.005047" elapsed="0.001280"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:28.004354" elapsed="0.002011"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:28.014723" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:28.006590" elapsed="0.008162"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:28.014810" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:44:28.015012" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:28.000677" elapsed="0.014360"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:28.016923" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:28.016476" elapsed="0.000663">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:28.017345" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:28.015819" elapsed="0.001556"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:28.017613" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:44:28.017461" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:28.017440" elapsed="0.000265"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.018011" elapsed="0.000027"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.018204" elapsed="0.000025"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:28.018285" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:44:28.022171" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:28.015412" elapsed="0.006788"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:28.024062" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:28.023544" elapsed="0.000569"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:28.024726" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:28.024266" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:28.152490" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:28.153146" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:28.153636" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:28.027407" elapsed="0.127370">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:28.024892" elapsed="0.130393">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.156085" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:28.155376" elapsed="0.001147"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:28.024866" elapsed="0.131723">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.157982" elapsed="0.000094"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:28.158390" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:28.158277" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:28.158229" elapsed="0.000344"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.159033" elapsed="0.000062"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:28.159211" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:28.022576" elapsed="0.136908">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:28.159678" elapsed="0.000045"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:27.895280" elapsed="0.264730">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:28.160662" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:28.160254" elapsed="0.000705"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:28.160207" elapsed="0.000811"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:28.161094" elapsed="0.000046"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:27.885758" elapsed="0.275627">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.218371" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:31.217690" elapsed="0.000740"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:31.219576" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.219282" elapsed="0.000372">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:31.219892" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:31.218793" elapsed="0.001149"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.221070" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:31.220328" elapsed="0.000790"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:31.221717" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:31.222073" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:31.221464" elapsed="0.000657"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.222865" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:31.222454" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.224130" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:31.223870" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.224632" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:31.224361" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.225363" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:31.225049" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:31.226218" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:31.225991" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:31.226296" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:44:31.226470" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:31.225569" elapsed="0.000928"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:31.226647" elapsed="0.000257"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:31.224917" elapsed="0.002027"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.227489" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:31.227191" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:31.228239" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:31.228031" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:31.228314" elapsed="0.000044"/>
</return>
<msg time="2026-08-15T23:44:31.228479" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:31.227696" elapsed="0.000807"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:31.228649" elapsed="0.000294"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:31.227060" elapsed="0.001924"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:31.224713" elapsed="0.004307"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:31.229064" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:44:31.229221" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:31.223524" elapsed="0.005722"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:31.223124" elapsed="0.006180"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.229573" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:31.229365" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:31.223079" elapsed="0.006627"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.230837" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:31.230030" elapsed="0.000856"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:31.231017" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:31.216098" elapsed="0.015151"/>
</kw>
<msg time="2026-08-15T23:44:31.231419" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:31.201837" elapsed="0.029636"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.245972" elapsed="0.000050"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.260014" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.272959" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.273196" 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-08-15T23:44:31.273377" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.273878" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:31.273640" elapsed="0.000386"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:31.273624" elapsed="0.000481"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.274294" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.274617" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.275028" elapsed="0.000056"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:31.273594" elapsed="0.001694"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.273455" elapsed="0.001873"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.275481" elapsed="0.000027"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.275567" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:31.275740" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:31.197318" elapsed="0.078450"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:31.277485" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.277033" elapsed="0.000643">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:31.277929" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:31.276484" elapsed="0.001471"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.278309" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:31.278044" elapsed="0.000425"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.279283" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:31.278679" elapsed="0.000647"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:31.278501" elapsed="0.000961"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:31.278011" elapsed="0.001481"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.286485" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:31.279647" elapsed="0.006868"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:31.286569" elapsed="0.000047"/>
</return>
<msg time="2026-08-15T23:44:31.286755" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:31.276150" elapsed="0.010631"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:31.288479" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.288084" elapsed="0.000613">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:31.288917" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:31.287529" elapsed="0.001414"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:31.289155" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:44:31.289016" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:31.288997" elapsed="0.000246"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.289445" elapsed="0.000028"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.289628" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.289724" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:31.292063" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:31.287167" elapsed="0.004926"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.293915" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:31.293364" elapsed="0.000602"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:31.294603" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:31.294121" elapsed="0.000569"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:31.412154" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:31.412951" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:31.413420" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.297150" elapsed="0.117362">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:31.294763" elapsed="0.120561">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.415950" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:31.415427" elapsed="0.000944"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:31.294744" elapsed="0.121694">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.417719" elapsed="0.000133"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.418179" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:31.418079" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:31.418029" elapsed="0.000304"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.418664" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.418956" elapsed="0.000055"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.292457" elapsed="0.126865">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.419523" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.173017" elapsed="0.246737">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:31.420462" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:31.420103" elapsed="0.000466"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:31.420051" elapsed="0.000553"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:31.420651" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:31.162995" elapsed="0.257806">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.476337" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:34.475686" elapsed="0.000706"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:34.477570" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.477302" elapsed="0.000346">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:34.477915" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:34.476845" elapsed="0.001117"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.479075" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:34.478324" elapsed="0.000800"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:34.479719" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:34.479999" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:34.479465" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.480743" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:34.480380" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.482110" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:34.481844" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.482583" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:34.482312" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.483306" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:34.483007" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:34.484149" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:34.483922" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:34.484228" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:44:34.484389" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:34.483516" 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-08-15T23:44:34.484563" elapsed="0.000260"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:34.482870" elapsed="0.001994"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.485409" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:34.485110" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:34.486207" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:34.485994" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:34.486282" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:34.486430" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:34.485622" elapsed="0.000833"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:34.486601" elapsed="0.000238"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:34.484980" elapsed="0.001901"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:34.482664" elapsed="0.004253"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:34.486960" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:34.487117" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:34.481465" elapsed="0.005678"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:34.481056" elapsed="0.006146"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.487473" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:34.487262" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:34.481010" elapsed="0.006596"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.488922" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:34.487927" elapsed="0.001079"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:34.489142" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:34.474089" elapsed="0.015293"/>
</kw>
<msg time="2026-08-15T23:44:34.489554" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:34.459150" elapsed="0.030459"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.502670" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.515631" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.528303" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.528512" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.528690" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.529213" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:34.528991" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:34.528974" elapsed="0.000468"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.529624" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.529967" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.530347" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:34.528937" elapsed="0.001615"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.528771" elapsed="0.001811"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.530729" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.530828" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:44:34.530973" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:34.454785" elapsed="0.076215"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:34.532905" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.532333" elapsed="0.000776">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:34.533294" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:34.531773" elapsed="0.001546"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.533652" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:34.533391" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.534576" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:34.534054" elapsed="0.000564"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:34.533872" elapsed="0.000858"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:34.533372" elapsed="0.001383"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.541379" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:34.534942" elapsed="0.006464"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:34.541459" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:44:34.541623" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:34.531423" elapsed="0.010225"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:34.543296" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.542908" elapsed="0.000575">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:34.543664" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:34.542321" elapsed="0.001372"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:34.543922" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:34.543766" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:34.543747" elapsed="0.000259"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.544150" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.544318" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.544384" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:34.546589" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:34.541994" elapsed="0.004622"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.548323" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:34.547858" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:34.549083" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:34.548604" elapsed="0.000525"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:34.658070" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:34.658665" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:34.659153" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.551455" elapsed="0.108754">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:34.549197" elapsed="0.111464">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.661034" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:34.660721" elapsed="0.000561"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:34.549178" elapsed="0.112146">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.662050" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.662257" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:34.662198" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:34.662172" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.662552" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.662651" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.547006" elapsed="0.115832">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.662952" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.430870" elapsed="0.232224">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:34.663476" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:34.663223" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:34.663198" elapsed="0.000456"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:34.663707" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:34.422055" elapsed="0.241842">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.718416" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:37.717789" elapsed="0.000681"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:37.719559" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.719291" elapsed="0.000343">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:37.719857" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:37.718841" elapsed="0.001063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.720901" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:37.720256" elapsed="0.000694"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:37.721548" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:37.721894" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:37.721299" elapsed="0.000642"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.722629" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:37.722268" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.724048" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:37.723766" elapsed="0.000329"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.724524" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:37.724254" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.725318" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:37.724973" elapsed="0.000373"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:37.726087" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:37.725865" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:37.726166" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:44:37.726326" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:37.725530" elapsed="0.000821"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:37.726502" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:37.724781" elapsed="0.002005"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.727357" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:37.727059" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:37.728110" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:37.727899" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:37.728187" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:37.728339" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:37.727564" elapsed="0.000799"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:37.728511" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:37.726928" elapsed="0.001847"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:37.724605" elapsed="0.004222"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:37.728873" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:44:37.729031" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:37.723435" elapsed="0.005623"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:37.723036" elapsed="0.006081"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.729417" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:37.729176" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:37.722989" elapsed="0.006563"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.730880" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:37.729877" elapsed="0.001052"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:37.731059" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:37.716205" elapsed="0.015086"/>
</kw>
<msg time="2026-08-15T23:44:37.731458" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:37.701991" elapsed="0.029521"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.744425" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.757145" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.769754" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.769965" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.770137" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.770603" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:37.770390" elapsed="0.000353"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:37.770375" elapsed="0.000466"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.771019" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.771327" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.771671" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:37.770344" elapsed="0.001537"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.770212" elapsed="0.001699"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.772056" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.772131" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:37.772251" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:37.697683" elapsed="0.074594"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:37.773914" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.773475" elapsed="0.000626">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:37.774279" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:37.772982" elapsed="0.001322"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.774624" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:37.774375" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.775534" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:37.775021" elapsed="0.000554"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:37.774841" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:37.774357" elapsed="0.001351"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.782301" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:37.775949" elapsed="0.006380"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:37.782382" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:37.782536" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:37.772631" elapsed="0.009931"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:37.784108" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.783721" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:37.784468" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:37.783236" elapsed="0.001258"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:37.784703" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:44:37.784565" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:37.784546" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.784954" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.785122" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.785188" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:37.787424" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:37.782915" elapsed="0.004536"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.789114" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:37.788639" elapsed="0.000524"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:37.789789" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:37.789313" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:37.905276" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:37.905908" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:37.906387" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.792201" elapsed="0.115300">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:37.789925" elapsed="0.118146">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.908590" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:37.908167" elapsed="0.000859"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:37.789906" elapsed="0.119197">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.910318" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.910932" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:37.910787" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:37.910732" elapsed="0.000368"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.911432" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.911590" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.787825" elapsed="0.123935">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.911865" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.674491" elapsed="0.237477">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:37.912241" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:37.912058" elapsed="0.000256"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:37.912041" elapsed="0.000297"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:37.912370" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:37.665059" elapsed="0.247411">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.970022" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:40.969367" elapsed="0.000711"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:40.971223" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:40.970929" elapsed="0.000374">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:40.971509" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:40.970445" elapsed="0.001110"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.972619" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:40.972000" elapsed="0.000668"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:40.973345" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:40.973784" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:40.973072" elapsed="0.000797"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.974582" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:40.974215" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.976014" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:40.975642" elapsed="0.000419"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.976585" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:40.976296" elapsed="0.000316"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.977378" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:40.977054" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:40.978258" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:40.978017" elapsed="0.000269"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:40.978339" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:44:40.978508" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:40.977598" elapsed="0.000941"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:40.978704" elapsed="0.000295"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:40.976901" elapsed="0.002143"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.979617" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:40.979296" elapsed="0.000360"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:40.980463" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:40.980245" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:40.980541" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:40.980696" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:40.979901" elapsed="0.000821"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:40.980889" elapsed="0.000235"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:40.979164" elapsed="0.002002"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:40.976667" elapsed="0.004535"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:40.981247" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:40.981407" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:40.975309" elapsed="0.006141"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:40.974886" elapsed="0.006624"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:40.981782" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:40.981572" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:40.974836" elapsed="0.007122"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:40.983266" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:40.982269" elapsed="0.001047"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:40.983451" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:40.967646" elapsed="0.016045"/>
</kw>
<msg time="2026-08-15T23:44:40.983931" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:40.953120" elapsed="0.030870"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:40.996891" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.009775" elapsed="0.000051"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.022561" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.022758" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.022957" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.023430" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:41.023215" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:41.023199" elapsed="0.000452"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.023854" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.024201" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.024548" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:41.023168" elapsed="0.001572"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.023034" elapsed="0.001736"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.024934" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.025010" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:41.025131" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:40.948773" elapsed="0.076385"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:41.026750" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:41.026369" elapsed="0.000608">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:41.027154" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:41.025867" elapsed="0.001312"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.027495" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:41.027251" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:41.028363" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:41.027859" elapsed="0.000545"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:41.027659" elapsed="0.000851"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:41.027232" elapsed="0.001303"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:41.035114" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:41.028688" elapsed="0.006454"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:41.035193" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:41.035348" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:41.025515" elapsed="0.009858"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:41.036974" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:41.036585" elapsed="0.000572">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:41.037372" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:41.036073" elapsed="0.001324"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:41.037727" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:41.037588" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:41.037569" elapsed="0.000275"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.037991" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.038158" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.038224" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:41.041572" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:41.035698" elapsed="0.005903"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:41.043278" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:41.042792" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:41.043951" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:41.043480" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:41.153003" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:41.153561" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:41.154044" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:41.046304" elapsed="0.108729">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:41.044083" elapsed="0.111394">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.156016" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:41.155562" elapsed="0.000844"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:41.044063" elapsed="0.112406">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.157576" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.157968" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:41.157873" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:41.157766" elapsed="0.000349"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.158439" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.158600" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:41.041978" elapsed="0.116910">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.159066" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:40.924232" elapsed="0.235151">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:41.160058" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:41.159593" elapsed="0.000632"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:41.159554" elapsed="0.000725"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:41.160352" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:40.913524" elapsed="0.247130">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.242605" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:44.242006" elapsed="0.000654"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:44.243744" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.243485" elapsed="0.000357">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:44.244048" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:44.243039" elapsed="0.001054"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.245090" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:44.244454" elapsed="0.000684"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:44.245726" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:44.246012" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:44.245474" elapsed="0.000583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.246749" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.246391" elapsed="0.000610"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.248165" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.247904" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.248669" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.248367" elapsed="0.000328"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.249417" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:44.249115" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:44.250185" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.249964" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:44.250264" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:44:44.250428" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:44.249625" elapsed="0.000828"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.250604" elapsed="0.000269"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:44.248981" elapsed="0.001933"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.251523" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:44.251162" elapsed="0.000388"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:44.252288" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.252074" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:44.252365" elapsed="0.000041"/>
</return>
<msg time="2026-08-15T23:44:44.252533" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:44.251733" elapsed="0.000825"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.252707" elapsed="0.000399"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:44.251031" elapsed="0.002118"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:44.248749" elapsed="0.004436"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:44.253231" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:44.253392" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:44.247559" elapsed="0.005859"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.247160" elapsed="0.006317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.253745" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.253536" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.247113" elapsed="0.006792"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.255001" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:44.254201" elapsed="0.000847"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:44.255178" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:44.240388" elapsed="0.015024"/>
</kw>
<msg time="2026-08-15T23:44:44.255580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:44.225627" elapsed="0.030007"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.268379" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.281177" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.294077" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.294270" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.294440" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.294988" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.294732" elapsed="0.000399"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:44.294716" elapsed="0.000491"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.295384" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.295698" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.296076" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:44.294685" elapsed="0.001588"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.294550" elapsed="0.001752"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.296447" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.296556" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:44:44.296685" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:44.193309" elapsed="0.103403"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:44.298321" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.297944" elapsed="0.000562">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:44.298683" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:44.297415" elapsed="0.001294"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.299100" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.298783" elapsed="0.000454"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.299991" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:44.299434" elapsed="0.000598"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.299266" elapsed="0.000873"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.298763" elapsed="0.001402"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.306675" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:44.300317" elapsed="0.006386"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:44.306755" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:44.306982" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:44.297089" elapsed="0.009918"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:44.308533" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.308167" elapsed="0.000583">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:44.309017" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:44.307657" elapsed="0.001386"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:44.309254" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:44.309116" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.309096" elapsed="0.000241"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.309482" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.309648" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.309747" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:44.311930" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:44.307331" elapsed="0.004627"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.313647" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.313192" elapsed="0.000503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.314319" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.313866" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:44.427587" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:44.428204" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:44.428673" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.316691" elapsed="0.113082">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:44.314433" elapsed="0.115739">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.430500" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.430231" elapsed="0.000544"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:44.314414" elapsed="0.116435">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.431544" elapsed="0.000042"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.431771" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:44.431712" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:44.431685" elapsed="0.000273"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.432167" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.432271" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.312317" elapsed="0.120115">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.432543" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.170248" elapsed="0.262452">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.433172" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.432888" elapsed="0.000392"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:44.432860" elapsed="0.000456"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.433364" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.161712" elapsed="0.271798">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:44:44.433730" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.458960" elapsed="32.974947">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:44:11.439195" elapsed="32.994880">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.443959" elapsed="0.000031"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.444323" elapsed="0.000025"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.444512" elapsed="0.000022"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:44:44.444130" elapsed="0.000450"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.444061" elapsed="0.000547"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:44.446132" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:44:44.445839" elapsed="0.000320"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.446782" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.446325" elapsed="0.000656"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:44.466149" elapsed="0.000888"/>
</kw>
<msg time="2026-08-15T23:44:44.467275" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:44.465759" elapsed="0.001589"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:44.465337" elapsed="0.002092"/>
</kw>
<msg time="2026-08-15T23:44:44.467473" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:44.456333" elapsed="0.011199"/>
</kw>
<msg time="2026-08-15T23:44:44.467637" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:44.455958" elapsed="0.011704"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.511722" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:44.511067" elapsed="0.000786"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:44.513548" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:44.512998" elapsed="0.000661">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:44.513785" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:44.512166" elapsed="0.001764"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.515392" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:44.514273" elapsed="0.001229"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:44.516249" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:44.516474" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:44.516030" elapsed="0.000550"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.517406" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.516895" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.519458" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.519198" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.520059" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.519702" elapsed="0.000383"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.521034" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:44.520537" elapsed="0.000524"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:44.521937" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.521633" elapsed="0.000331"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:44.522014" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:44.522170" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:44.521276" elapsed="0.000918"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.522345" elapsed="0.000234"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:44.520401" elapsed="0.002218"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.523183" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:44.522883" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:44.523983" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.523737" elapsed="0.000272"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:44.524059" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:44.524210" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:44.523389" elapsed="0.000845"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:44.524383" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:44.522735" elapsed="0.001910"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:44.520186" elapsed="0.004516"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:44.524769" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:44:44.525169" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:44.518395" elapsed="0.006877"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.517644" elapsed="0.007706"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.525658" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.525430" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.517622" elapsed="0.008295"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.527032" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:44.526067" elapsed="0.001076"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:44.527373" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:44.510075" elapsed="0.017453"/>
</kw>
<msg time="2026-08-15T23:44:44.527618" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:44.497035" elapsed="0.030647"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.540379" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.552932" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.565514" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.565708" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.565895" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.566311" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.566164" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:44.566148" elapsed="0.000243"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.566529" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.566693" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.566930" elapsed="0.000031"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:44.566117" elapsed="0.000882"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.565973" elapsed="0.001052"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.567174" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:44.567249" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:44.567376" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:44.492543" elapsed="0.074860"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.568531" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.568279" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:44.588000" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:44.588085" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:44.588178" 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-08-15T23:44:44.570963" elapsed="0.017241"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.568643" elapsed="0.019601"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.588422" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.588270" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.568625" elapsed="0.019880"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.592311" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.589709" elapsed="0.002646"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.589486" elapsed="0.002905"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.589467" elapsed="0.002949"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.595267" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:44.592692" elapsed="0.002622"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.592473" elapsed="0.002875"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.592456" elapsed="0.002917"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.595954" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:44.595542" elapsed="0.000439"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.596286" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.596053" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.596961" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:44.596527" elapsed="0.000461"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.596369" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.596034" elapsed="0.001012"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.597603" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:44.597201" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:44.597959" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:44.597702" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:44.598592" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:44.598197" elapsed="0.000421"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:44.598042" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:44.597683" elapsed="0.000993"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:44.598845" elapsed="0.000463"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:44:44.599862" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:44.599473" elapsed="0.000417"/>
</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-08-15T23:44:44.600050" elapsed="0.005928"/>
</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-08-15T23:44:44.589022" elapsed="0.017020"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:44:44.606089" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:44:44.608513" 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-08-15T23:44:44.567661" elapsed="0.040880"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:44:44.608597" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:44:44.467904" elapsed="0.140818"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:44:44.445356" elapsed="0.163429"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:44:44.444830" elapsed="0.164037"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.294826" elapsed="34.314128">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:44:10.294640" elapsed="34.314414">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:44:10.294501" elapsed="34.314618">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.294323" elapsed="34.314893">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.614140" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.613314" elapsed="0.000898"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:44:45.614336" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:44:45.614722" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:44:45.612385" elapsed="0.002396"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:45.641114" elapsed="0.000915"/>
</kw>
<msg time="2026-08-15T23:44:45.642188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.640619" elapsed="0.001632"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:45.640203" elapsed="0.002128"/>
</kw>
<msg time="2026-08-15T23:44:45.642376" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.631199" elapsed="0.011226"/>
</kw>
<msg time="2026-08-15T23:44:45.642529" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:45.630858" elapsed="0.011695"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.643498" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.642721" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.643978" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.643626" elapsed="0.000420"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.677976" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.677575" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:45.678852" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.678564" elapsed="0.000371">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:45.679032" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:45.678222" elapsed="0.000834"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.679661" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:45.679269" elapsed="0.000419"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:45.680133" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:45.680291" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:45.679989" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.680829" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.680524" elapsed="0.000354"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.681940" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.681637" elapsed="0.000350"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.682408" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.682144" elapsed="0.000290"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.683128" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.682797" elapsed="0.000357"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.683917" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.683664" elapsed="0.000280"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.683995" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:45.684150" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.683348" elapsed="0.000827"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.684327" elapsed="0.000245"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:44:45.682662" elapsed="0.001951"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.685222" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.684922" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.685989" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.685748" elapsed="0.000268"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.686075" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:45.686225" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.685430" 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-08-15T23:44:45.686397" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:45.684767" elapsed="0.001895"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.687224" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.686925" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.687975" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.687748" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.688052" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:45.688361" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.687432" elapsed="0.000954"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.688535" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:44:45.686777" elapsed="0.002060"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.689381" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.689083" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.690245" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.690029" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.690324" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:45.690476" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.689619" elapsed="0.000882"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.690694" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:44:45.688952" elapsed="0.002027"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.691519" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.691223" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.692384" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.692130" elapsed="0.000287"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.692484" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:45.692746" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.691742" elapsed="0.001041"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.693008" elapsed="0.000230"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:44:45.691093" elapsed="0.002187"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.693999" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.693561" elapsed="0.000474"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.695159" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.694667" elapsed="0.000523"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.695249" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:44:45.695425" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.694285" elapsed="0.001169"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.695643" elapsed="0.000260"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:44:45.693400" elapsed="0.002545"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.696515" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.696208" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.697336" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.697121" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.697415" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:45.697567" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.696757" 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-08-15T23:44:45.697739" elapsed="0.000243"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:44:45.696075" elapsed="0.001948"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.698581" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:45.698273" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:45.699354" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.699142" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:45.699432" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:45.699585" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:45.698793" elapsed="0.000816"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.699758" elapsed="0.000241"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:45.698136" elapsed="0.001905"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:45.682484" elapsed="0.017594"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:45.700129" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:45.700297" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:45.681315" elapsed="0.019010"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.681007" elapsed="0.019351"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.700544" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.700388" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.680985" elapsed="0.019762"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.702126" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:45.701136" elapsed="0.001020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:45.702259" elapsed="0.000056"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:45.676537" elapsed="0.026011"/>
</kw>
<msg time="2026-08-15T23:44:45.702644" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.662841" elapsed="0.039910"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.725583" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.747886" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.770043" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.770286" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.770486" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.771100" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.770830" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:45.770787" elapsed="0.000484"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.771473" elapsed="0.000046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.771817" elapsed="0.000047"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.772146" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:45.770753" elapsed="0.001561"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:45.770617" elapsed="0.001758"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.772524" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:45.772675" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:44:45.772828" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:45.658341" elapsed="0.114515"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.800969" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.800553" elapsed="0.000445"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:45.801797" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.801545" elapsed="0.000355">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:45.801994" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:45.801209" elapsed="0.000809"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.802625" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:45.802229" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:45.803027" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:45.803187" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:45.802884" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.803672" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.803423" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:44:45.804173" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.803869" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.804704" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.804401" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.804258" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.803847" elapsed="0.000942"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.805767" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:45.805061" elapsed="0.000736"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:45.805921" elapsed="0.000055"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:45.799569" elapsed="0.006627"/>
</kw>
<msg time="2026-08-15T23:44:45.806285" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.786063" elapsed="0.020317"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.829185" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.851556" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.873658" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.873923" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.874118" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.874687" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.874423" elapsed="0.000348"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:45.874408" elapsed="0.000469"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.875079" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.875406" elapsed="0.000044"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.875729" elapsed="0.000043"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:45.874377" elapsed="0.001544"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:45.874244" elapsed="0.001743"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.876137" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:45.876289" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:44:45.876420" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:45.783205" elapsed="0.093245"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:45.879146" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.878517" elapsed="0.000750">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:45.879396" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:45.877243" elapsed="0.002178"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.879892" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.879531" elapsed="0.000518"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.881283" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.880539" elapsed="0.000785"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.880076" elapsed="0.001327"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.879511" elapsed="0.001916"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.884291" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:45.881579" elapsed="0.002739"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:45.884449" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:45.884608" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:45.876861" elapsed="0.007772"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.886522" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.886048" elapsed="0.000537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.887243" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.886749" elapsed="0.000562"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.887963" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.887474" elapsed="0.000551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.888651" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.888187" elapsed="0.000524"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:44:45.890298" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:44:45.889669" elapsed="0.000728"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:44:45.891276" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:44:45.890657" elapsed="0.000716"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.891631" elapsed="0.000498"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.893129" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.892391" elapsed="0.000962"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:44:45.893439" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:45.893710" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:44:45.888979" elapsed="0.004758"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:45.922191" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:44:45.922284" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:45.922447" 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-08-15T23:44:45.902223" elapsed="0.020265"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.893860" elapsed="0.028756"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.922884" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.922650" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.893841" elapsed="0.029280"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.927464" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.924910" elapsed="0.002620"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.924404" elapsed="0.003173"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.924370" elapsed="0.003277"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.930739" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:45.928285" elapsed="0.002552"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.927733" elapsed="0.003153"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.927702" elapsed="0.003254"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.932567" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:45.931525" elapsed="0.001143"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.933410" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.932881" elapsed="0.000626"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.934405" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.933944" elapsed="0.000497"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.933576" elapsed="0.000914"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.932845" elapsed="0.001712"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.936240" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:45.935133" elapsed="0.001208"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.936972" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.936470" elapsed="0.000599"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.938024" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:45.937497" elapsed="0.000564"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.937137" elapsed="0.000973"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.936438" elapsed="0.001738"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.938429" elapsed="0.000830"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:44:45.940274" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:45.939533" elapsed="0.000840"/>
</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-08-15T23:44:45.940640" elapsed="0.002769"/>
</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-08-15T23:44:45.923620" elapsed="0.019898"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:44:45.943756" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-08-15T23:44:45.943605" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.943584" elapsed="0.000382"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.944117" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:45.944225" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:45.946579" 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-08-15T23:44:45.885104" elapsed="0.061502"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:44:45.946671" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:45.946843" 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-08-15T23:44:45.647090" elapsed="0.299780"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:45.947213" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:45.946975" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.946958" elapsed="0.000347"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:44:45.947338" elapsed="0.000027"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:44:45.644323" elapsed="0.303139"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:45.644076" elapsed="0.303429"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:45.643605" elapsed="0.303923"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.947672" elapsed="0.000267"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:44:45.616480" elapsed="0.331526"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:44:45.615099" elapsed="0.333014"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:45.948740" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:45.948277" elapsed="0.000491"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:45.968901" elapsed="0.000787"/>
</kw>
<msg time="2026-08-15T23:44:45.969740" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.968525" elapsed="0.001269"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:45.968134" elapsed="0.001759"/>
</kw>
<msg time="2026-08-15T23:44:45.969936" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:45.959389" elapsed="0.010592"/>
</kw>
<msg time="2026-08-15T23:44:45.970083" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:45.959061" elapsed="0.011046"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.019012" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:46.018386" elapsed="0.000676"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:46.020226" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:46.019966" elapsed="0.000337">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:46.020499" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:46.019408" elapsed="0.001136"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.021513" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:46.020913" elapsed="0.000680"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:46.022314" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:46.022571" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:46.022066" elapsed="0.000552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.023347" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:46.022986" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.024827" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:46.024373" elapsed="0.000502"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.025310" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:46.025037" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.026046" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:46.025721" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:46.026793" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:46.026573" elapsed="0.000323"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:46.026995" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:44:46.027158" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:46.026257" elapsed="0.000927"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:46.027335" elapsed="0.000235"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:46.025586" elapsed="0.002025"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.028185" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:46.027880" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:46.028940" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:46.028710" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:46.029017" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:46.029168" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:46.028395" elapsed="0.000797"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:46.029339" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:46.027726" elapsed="0.001908"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:46.025392" elapsed="0.004278"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:46.029713" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:46.029887" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:46.024045" elapsed="0.005869"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:46.023596" elapsed="0.006376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.030243" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:46.030033" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:46.023552" elapsed="0.006825"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.031484" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:46.030677" elapsed="0.000856"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:46.031667" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:46.016781" elapsed="0.015142"/>
</kw>
<msg time="2026-08-15T23:44:46.032092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:46.002488" elapsed="0.029658"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.044947" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.057699" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.070434" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.070664" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.070858" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.071329" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:46.071115" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:46.071100" elapsed="0.000446"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.071723" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.072058" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.072409" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:46.071070" elapsed="0.001533"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.070936" elapsed="0.001696"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.072783" elapsed="0.000046"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.072888" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:46.073015" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:45.998155" elapsed="0.074887"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:46.074640" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:46.074260" elapsed="0.000595">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:46.075036" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:46.073740" elapsed="0.001321"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.075377" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:46.075133" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.076511" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:46.075710" elapsed="0.000842"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:46.075541" elapsed="0.001118"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:46.075114" elapsed="0.001571"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.083268" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:46.076857" elapsed="0.006439"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:46.083348" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:46.083505" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:46.073399" elapsed="0.010131"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:46.085141" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:46.084688" elapsed="0.000633">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:46.085499" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:46.084200" elapsed="0.001324"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:46.086084" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:44:46.085596" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:46.085577" elapsed="0.000628"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.086356" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.086527" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.086593" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:46.088580" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:46.083875" elapsed="0.004731"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.090287" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:46.089832" elapsed="0.000503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:46.090960" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:46.090484" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:46.108168" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:46.108423" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:46.108618" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:46.093310" elapsed="0.015765">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:46.091074" elapsed="0.018195">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.109460" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:46.109305" elapsed="0.000327"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:46.091056" elapsed="0.018604">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.110190" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.110327" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:46.110289" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:46.110271" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.110530" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.110599" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:46.088987" elapsed="0.021720">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.110783" elapsed="0.000162"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.975353" elapsed="0.135770">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:46.111790" elapsed="0.000096"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:46.111335" elapsed="0.000751"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:46.111296" elapsed="0.000847"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:46.112219" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.970894" elapsed="0.141557">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.169662" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:49.169063" elapsed="0.000654"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:49.170816" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.170533" elapsed="0.000366">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:49.171104" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:49.170086" elapsed="0.001063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.172203" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:49.171487" elapsed="0.000763"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:49.172865" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:49.173126" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:49.172583" elapsed="0.000590"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.173913" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:49.173502" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.175170" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:49.174907" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.175654" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:49.175375" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.176372" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:49.176067" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:49.177259" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:49.177036" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:49.177339" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:44:49.177499" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:49.176585" elapsed="0.000940"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:49.177676" elapsed="0.000255"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:49.175934" elapsed="0.002038"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.178522" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:49.178219" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:49.179419" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:49.179207" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:49.179496" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:49.179707" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:49.178731" 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-08-15T23:44:49.179897" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:49.178088" elapsed="0.002075"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:49.175734" elapsed="0.004465"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:49.180242" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:49.180401" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:49.174560" elapsed="0.005868"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:49.174163" elapsed="0.006324"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.180773" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:49.180546" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:49.174118" elapsed="0.006809"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.182032" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:49.181226" elapsed="0.000861"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:49.182217" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:49.167451" elapsed="0.014998"/>
</kw>
<msg time="2026-08-15T23:44:49.182618" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:49.153110" elapsed="0.029563"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.195464" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.208264" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.220979" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.221175" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.221347" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.221836" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:49.221604" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:49.221588" elapsed="0.000481"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.222254" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.222605" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.222979" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:49.221558" elapsed="0.001619"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.221423" elapsed="0.001784"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.223353" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.223430" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:49.223552" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:49.148717" elapsed="0.074863"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:49.225208" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.224826" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:49.225576" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:49.224282" elapsed="0.001320"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.225982" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:49.225675" elapsed="0.000450"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.226853" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:49.226325" elapsed="0.000593"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:49.226153" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:49.225656" elapsed="0.001405"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.234037" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:49.227216" elapsed="0.006852"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:49.234124" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:44:49.234289" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:49.223956" elapsed="0.010360"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:49.236090" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.235587" elapsed="0.000700">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:49.236470" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:49.235062" elapsed="0.001434"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:49.236719" elapsed="0.000048"/>
</return>
<status status="PASS" start="2026-08-15T23:44:49.236572" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:49.236551" elapsed="0.000291"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.236991" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.237174" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.237242" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:49.239289" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:49.234680" elapsed="0.004637"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.241320" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:49.240656" elapsed="0.000715"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:49.242016" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:49.241526" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:49.355309" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:49.355972" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:49.356448" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.244392" elapsed="0.113093">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:49.242139" elapsed="0.116010">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.358712" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:49.358255" elapsed="0.000929"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:49.242116" elapsed="0.117132">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.360417" elapsed="0.000066"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.360751" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:49.360657" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:49.360614" elapsed="0.000341"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.361326" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.361488" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.239685" elapsed="0.122060">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.361963" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.123463" elapsed="0.238755">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:49.362898" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:49.362430" elapsed="0.000635"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:49.362392" elapsed="0.000728"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:49.363193" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:49.113594" elapsed="0.249826">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.420428" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:52.419745" elapsed="0.000759"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:52.421675" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.421379" elapsed="0.000379">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:52.422020" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:52.420896" elapsed="0.001185"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.423102" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:52.422441" elapsed="0.000710"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:52.423954" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:52.424224" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:52.423517" elapsed="0.000769"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.425077" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:52.424654" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.426514" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:52.426236" elapsed="0.000325"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.427045" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:52.426743" elapsed="0.000329"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.427870" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:52.427467" elapsed="0.000432"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:52.428691" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:52.428431" elapsed="0.000287"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:52.428772" elapsed="0.000054"/>
</return>
<msg time="2026-08-15T23:44:52.428993" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:52.428089" elapsed="0.000933"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:52.429184" elapsed="0.000259"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:52.427310" elapsed="0.002175"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.430161" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:52.429763" elapsed="0.000424"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:52.431136" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:52.430915" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:52.431213" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:52.431366" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:52.430379" elapsed="0.001014"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:52.431568" elapsed="0.000276"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:52.429610" elapsed="0.002279"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:52.427127" elapsed="0.004799"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:52.431972" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:52.432132" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:52.425790" elapsed="0.006369"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:52.425344" elapsed="0.006879"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.432520" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:52.432285" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:52.425294" elapsed="0.007443"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.433949" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:52.433077" elapsed="0.000974"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:52.434210" elapsed="0.000090"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:52.418032" elapsed="0.016445"/>
</kw>
<msg time="2026-08-15T23:44:52.434657" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:52.403178" elapsed="0.031538"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.448055" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.461251" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.474284" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.474479" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.474651" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.475150" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:52.474934" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:52.474919" elapsed="0.000453"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.475551" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.475885" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.476239" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:52.474888" elapsed="0.001547"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.474730" elapsed="0.001735"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.476610" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.476685" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:44:52.476830" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:52.398475" elapsed="0.078417"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:52.478565" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.478159" elapsed="0.000602">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:52.479012" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:52.477591" elapsed="0.001448"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.479362" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:52.479112" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.480270" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:52.479710" elapsed="0.000602"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:52.479530" elapsed="0.000892"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:52.479093" elapsed="0.001354"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.487348" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:52.480598" elapsed="0.006778"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:52.487430" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:44:52.487590" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:52.477258" elapsed="0.010357"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:52.489266" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.488882" elapsed="0.000569">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:52.489631" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:52.488289" elapsed="0.001368"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:52.489884" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:44:52.489728" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:52.489709" elapsed="0.000258"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.490185" elapsed="0.000027"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.490372" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.490438" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:44:52.492451" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:52.487960" elapsed="0.004519"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.494281" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:52.493744" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:52.495011" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:52.494496" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:52.592667" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:52.593383" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:52.594053" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.497392" elapsed="0.097721">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:52.495130" elapsed="0.100456">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.596123" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:52.595676" elapsed="0.000872"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:52.495111" elapsed="0.101506">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.598010" elapsed="0.000067"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.598457" elapsed="0.000057"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:52.598326" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:52.598258" elapsed="0.000386"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.599027" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.599192" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.492883" elapsed="0.106564">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.599639" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.374052" elapsed="0.225927">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:52.600682" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:52.600228" elapsed="0.000679"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:52.600186" elapsed="0.000779"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:52.601039" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:52.364559" elapsed="0.236713">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.655366" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:55.654743" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:55.656503" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.656235" elapsed="0.000346">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:55.656776" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:55.655767" elapsed="0.001077"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.657785" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:55.657183" elapsed="0.000674"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:55.658556" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:55.658990" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:55.658296" elapsed="0.000746"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.659747" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:55.659387" elapsed="0.000475"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.661066" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:55.660739" elapsed="0.000373"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.661539" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:55.661268" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.662275" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:55.661948" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:55.663051" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:55.662825" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:55.663130" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:44:55.663292" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:55.662485" elapsed="0.000832"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:55.663467" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:55.661813" elapsed="0.001935"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.664366" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:55.664066" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:55.665265" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:55.665053" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:55.665342" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:44:55.665493" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:55.664717" elapsed="0.000801"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:55.665666" elapsed="0.000284"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:55.663933" elapsed="0.002059"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:55.661619" elapsed="0.004409"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:55.666088" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:44:55.666298" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:55.660416" elapsed="0.005909"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:55.660019" elapsed="0.006366"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.666659" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:55.666447" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:55.659973" elapsed="0.006845"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.667923" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:55.667123" elapsed="0.000848"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:55.668101" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:55.653134" elapsed="0.015200"/>
</kw>
<msg time="2026-08-15T23:44:55.668522" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:55.638812" elapsed="0.029766"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.681723" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.694662" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.707337" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.707541" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.707720" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.708235" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:55.708017" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:55.708000" elapsed="0.000489"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.708684" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.709032" elapsed="0.000036"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.709472" elapsed="0.000026"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:55.707963" elapsed="0.001736"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.707817" elapsed="0.001918"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.709946" elapsed="0.000028"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.710046" elapsed="0.000022"/>
</return>
<msg time="2026-08-15T23:44:55.710256" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:55.634522" elapsed="0.075772"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:55.712208" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.711734" elapsed="0.000677">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:55.712594" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:55.711174" elapsed="0.001445"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.713041" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:55.712695" elapsed="0.000490"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.714066" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:55.713451" elapsed="0.000685"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:55.713226" elapsed="0.001051"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:55.712675" elapsed="0.001635"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.721474" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:55.714470" elapsed="0.007032"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:55.721558" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:55.721747" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:55.710765" elapsed="0.011009"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:55.723389" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.723012" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:55.723765" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:55.722497" elapsed="0.001294"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:55.724032" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:55.723892" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:55.723871" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.724260" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.724432" elapsed="0.000026"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.724505" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:55.726654" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:55.722159" elapsed="0.004522"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.728395" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:55.727921" elapsed="0.000540"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:55.729125" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:55.728638" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:55.833669" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:55.834319" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:55.834744" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.731495" elapsed="0.104238">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:55.729240" elapsed="0.107021">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.836757" elapsed="0.000100"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:55.836364" elapsed="0.000897"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:55.729222" elapsed="0.108113">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.838679" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.839081" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:55.838977" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:55.838934" elapsed="0.000299"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.839557" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.839716" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.727074" elapsed="0.112933">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.840200" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.610639" elapsed="0.229787">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:55.841091" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:55.840632" elapsed="0.000638"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:55.840593" elapsed="0.000731"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:55.841397" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:55.602409" elapsed="0.239211">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.898600" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:58.897914" elapsed="0.000743"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:58.899823" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.899490" elapsed="0.000434">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:58.900209" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:58.899031" elapsed="0.001236"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.901394" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:58.900661" elapsed="0.000780"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:44:58.902045" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:44:58.902327" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:44:58.901777" elapsed="0.000598"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.903170" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:58.902726" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.904515" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:58.904246" elapsed="0.000316"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.905146" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:44:58.904783" elapsed="0.000552"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.906038" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:58.905712" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:58.906840" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:58.906580" elapsed="0.000288"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:58.906923" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:44:58.907091" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:58.906253" elapsed="0.000863"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:58.907268" elapsed="0.000253"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:44:58.905576" elapsed="0.001986"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.908183" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:44:58.907825" elapsed="0.000386"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:44:58.909115" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:44:58.908900" elapsed="0.000241"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:44:58.909193" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:44:58.909344" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:44:58.908404" elapsed="0.000965"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:44:58.909518" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:44:58.907679" elapsed="0.002104"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:44:58.905390" elapsed="0.004446"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:44:58.909882" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:44:58.910040" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:44:58.903878" elapsed="0.006188"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:58.903432" elapsed="0.006694"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.910396" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:58.910185" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:58.903386" elapsed="0.007142"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.911661" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:44:58.910848" elapsed="0.000861"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:44:58.911858" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:44:58.896321" elapsed="0.015783"/>
</kw>
<msg time="2026-08-15T23:44:58.912272" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:44:58.881740" elapsed="0.030589"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.925128" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.937828" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.950544" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.950759" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.950963" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.951464" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:58.951239" elapsed="0.000372"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:58.951222" elapsed="0.000466"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.951906" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.952379" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.952757" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:44:58.951186" elapsed="0.001785"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:44:58.951046" elapsed="0.001958"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.953152" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:58.953231" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:44:58.953378" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:44:58.877055" elapsed="0.076351"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:58.955159" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.954685" elapsed="0.000672">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:58.955538" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:58.954146" elapsed="0.001418"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.955927" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:58.955637" elapsed="0.000464"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.956881" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:44:58.956310" elapsed="0.000616"/>
</kw>
<status status="PASS" start="2026-08-15T23:44:58.956131" elapsed="0.000903"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:58.955618" elapsed="0.001440"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.963657" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:44:58.957213" elapsed="0.006473"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:44:58.963739" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:44:58.963918" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:58.953771" elapsed="0.010173"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:44:58.965674" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.965299" elapsed="0.000580">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:44:58.966060" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:44:58.964744" elapsed="0.001342"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:44:58.966300" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:44:58.966159" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-15T23:44:58.966140" elapsed="0.000244"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.966530" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:58.966699" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:44:58.966765" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:44:58.969032" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:44:58.964414" elapsed="0.004646"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.970738" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:58.970272" elapsed="0.000515"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:44:58.971412" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:44:58.970957" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:44:59.074421" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:44:59.074854" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:44:59.075212" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.974396" elapsed="0.101528">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:44:58.971528" elapsed="0.104725">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:59.076619" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:59.076319" elapsed="0.000586"/>
</branch>
<status status="FAIL" start="2026-08-15T23:44:58.971508" elapsed="0.105441">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:59.078689" elapsed="0.000043"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:59.078999" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:44:59.078936" elapsed="0.000129"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:59.078905" elapsed="0.000193"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:59.079315" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:44:59.079418" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.969425" elapsed="0.110161">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:59.079781" elapsed="0.000069"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.854189" elapsed="0.225794">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:44:59.080408" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:44:59.080134" elapsed="0.000383"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:44:59.080095" elapsed="0.000459"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:44:59.080602" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:44:58.842732" elapsed="0.238021">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.139056" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:02.138428" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:02.140245" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.139950" elapsed="0.000377">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:02.140529" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:02.139475" elapsed="0.001100"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.141547" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:02.140943" elapsed="0.000651"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:02.142242" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:02.142512" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:02.141987" elapsed="0.000571"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.143279" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:02.142906" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.144567" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:02.144307" elapsed="0.000311"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.145174" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:02.144775" elapsed="0.000424"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.145945" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:02.145584" elapsed="0.000387"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:02.146710" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:02.146481" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:02.146791" elapsed="0.000054"/>
</return>
<msg time="2026-08-15T23:45:02.146982" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:02.146161" elapsed="0.000847"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:02.147228" elapsed="0.000258"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:02.145448" elapsed="0.002080"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.148107" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:02.147778" elapsed="0.000356"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:02.148958" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:02.148631" elapsed="0.000354"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:02.149036" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:02.149188" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:02.148317" elapsed="0.000896"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:02.149362" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:02.147647" elapsed="0.001979"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:02.145260" elapsed="0.004402"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:02.149707" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:45:02.149896" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:02.143983" elapsed="0.005939"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:02.143545" elapsed="0.006436"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.150251" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:02.150042" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:02.143491" elapsed="0.006893"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.151898" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:02.150682" elapsed="0.001264"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:02.152077" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:02.136715" elapsed="0.015595"/>
</kw>
<msg time="2026-08-15T23:45:02.152478" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:02.122226" elapsed="0.030306"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.165500" elapsed="0.000033"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.178193" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.190873" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.191108" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.191284" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.191763" elapsed="0.000083"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:02.191549" elapsed="0.000377"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:02.191533" elapsed="0.000470"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.192182" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.192493" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.192855" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:02.191502" elapsed="0.001550"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.191363" elapsed="0.001719"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.193228" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.193305" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:02.193428" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:02.117540" elapsed="0.075914"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:02.195110" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.194692" elapsed="0.000614">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:02.195487" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:02.194191" elapsed="0.001327"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.195865" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:02.195590" elapsed="0.000453"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.196742" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:02.196252" elapsed="0.000530"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:02.196073" elapsed="0.000833"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:02.195571" elapsed="0.001361"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.203347" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:02.197083" elapsed="0.006291"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:02.203426" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:02.203587" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:02.193864" elapsed="0.009748"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:02.205269" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.204899" elapsed="0.000551">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:02.205629" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:02.204398" elapsed="0.001256"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:02.205906" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:45:02.205726" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:02.205706" elapsed="0.000291"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.206178" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.206347" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.206413" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:02.208718" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:02.204076" elapsed="0.004669"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.210509" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:02.210050" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:02.211187" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:02.210707" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:02.307291" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:02.307947" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:02.308396" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.213593" elapsed="0.095833">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:02.211301" elapsed="0.098656">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.310461" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:02.310051" elapsed="0.000658"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:02.211282" elapsed="0.099467">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.311451" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.311650" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:02.311594" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:02.311569" elapsed="0.000172"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.311982" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.312084" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.209124" elapsed="0.103117">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.312347" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.094415" elapsed="0.218073">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:02.312925" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:02.312617" elapsed="0.000468"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:02.312593" elapsed="0.000530"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:02.313170" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:02.083146" elapsed="0.230171">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.368243" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:05.367614" elapsed="0.000684"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:05.369414" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.369120" elapsed="0.000377">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:05.369696" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:05.368648" elapsed="0.001093"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.370720" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:05.370120" elapsed="0.000649"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:05.371499" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:05.371761" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:05.371231" elapsed="0.000590"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.372505" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:05.372149" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.373827" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:05.373547" elapsed="0.000328"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.374307" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:05.374033" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.375016" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:05.374692" elapsed="0.000350"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:05.375873" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:05.375572" elapsed="0.000331"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:05.375956" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:45:05.376118" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:05.375224" 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-08-15T23:45:05.376294" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:05.374559" elapsed="0.002018"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.377153" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:05.376847" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:05.377904" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:05.377675" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:05.377979" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:05.378132" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:05.377359" elapsed="0.000798"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:05.378302" elapsed="0.000276"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:05.376697" elapsed="0.001924"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:05.374386" elapsed="0.004272"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:05.378702" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:05.378876" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:05.373222" elapsed="0.005680"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:05.372755" elapsed="0.006205"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.379228" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:05.379021" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:05.372709" elapsed="0.006652"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.380675" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:05.379685" elapsed="0.001039"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:05.380873" elapsed="0.000077"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:05.366014" elapsed="0.015094"/>
</kw>
<msg time="2026-08-15T23:45:05.381274" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:05.351587" elapsed="0.029741"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.394125" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.406814" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.419531" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.419724" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.419917" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.420386" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:05.420172" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:05.420157" elapsed="0.000447"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.420787" elapsed="0.000047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.421124" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.421471" elapsed="0.000055"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:05.420128" elapsed="0.001575"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.419994" elapsed="0.001738"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.421896" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.421974" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:05.422095" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:05.347246" elapsed="0.074875"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:05.423724" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.423320" elapsed="0.000629">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:05.424128" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:05.422826" elapsed="0.001327"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.424469" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:05.424225" elapsed="0.000378"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.425323" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:05.424827" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:05.424631" elapsed="0.000839"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:05.424206" elapsed="0.001288"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.432123" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:05.425643" elapsed="0.006507"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:05.432202" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:05.432363" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:05.422478" elapsed="0.009910"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:05.433959" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.433567" elapsed="0.000577">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:05.434327" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:05.433078" elapsed="0.001274"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:05.434565" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:45:05.434425" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:05.434405" elapsed="0.000243"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.434793" elapsed="0.000047"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.434988" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.435054" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:05.437298" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:05.432719" elapsed="0.004606"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.439016" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:05.438538" elapsed="0.000525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:05.439699" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:05.439212" elapsed="0.000571"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:05.534552" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:05.535148" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:05.535609" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.442098" elapsed="0.094496">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:05.439876" elapsed="0.097204">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.537553" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:05.537170" elapsed="0.000820"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:05.439857" elapsed="0.098198">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.539245" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.539623" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:05.539475" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:05.539435" elapsed="0.000333"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.540164" elapsed="0.000056"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.540331" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.437690" elapsed="0.102886">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.540752" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.324151" elapsed="0.216768">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:05.541300" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:05.541050" elapsed="0.000350"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:05.541027" elapsed="0.000406"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:05.541477" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:05.314415" elapsed="0.227201">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.597338" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:08.596686" elapsed="0.000709"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:08.598585" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.598303" elapsed="0.000363">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:08.598919" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:08.597848" elapsed="0.001117"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.600004" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:08.599308" elapsed="0.000744"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:08.600630" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:08.600912" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:08.600383" elapsed="0.000576"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.601674" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:08.601312" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.602987" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:08.602705" elapsed="0.000329"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.603483" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:08.603193" elapsed="0.000316"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.604195" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:08.603895" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:08.605040" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:08.604724" elapsed="0.000342"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:08.605146" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:45:08.605310" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:08.604404" 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-08-15T23:45:08.605484" elapsed="0.000239"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:08.603739" elapsed="0.002024"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.606318" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:08.606022" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:08.607059" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:08.606852" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:08.607134" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:08.607283" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:08.606525" elapsed="0.000782"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:08.607451" elapsed="0.000218"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:08.605893" elapsed="0.001818"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:08.603563" elapsed="0.004183"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:08.607790" elapsed="0.000041"/>
</return>
<msg time="2026-08-15T23:45:08.607960" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:08.602379" elapsed="0.005607"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:08.601981" elapsed="0.006062"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.608309" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:08.608102" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:08.601936" elapsed="0.006505"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.609737" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:08.608735" elapsed="0.001103"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:08.609973" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:08.595127" elapsed="0.015079"/>
</kw>
<msg time="2026-08-15T23:45:08.610374" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:08.580791" elapsed="0.029637"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.623544" elapsed="0.000044"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.636481" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.649158" 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-08-15T23:45:08.649358" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.649539" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.650045" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:08.649827" elapsed="0.000361"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:08.649791" elapsed="0.000473"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.650438" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.650748" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.651115" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:08.649759" elapsed="0.001552"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.649617" elapsed="0.001723"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.651483" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.651560" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:08.651682" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:08.576534" elapsed="0.075176"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:08.653422" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.653020" elapsed="0.000594">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:08.653794" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:08.652484" elapsed="0.001359"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.654164" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:08.653916" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.655084" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:08.654508" elapsed="0.000616"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:08.654331" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:08.653897" elapsed="0.001360"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.661908" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:08.655406" elapsed="0.006529"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:08.661988" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:08.662144" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:08.652144" elapsed="0.010026"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:08.663726" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.663356" elapsed="0.000588">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:08.664128" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:08.662864" elapsed="0.001290"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:08.664364" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:45:08.664226" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:08.664208" elapsed="0.000238"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.664588" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.664756" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.664893" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:08.667041" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:08.662496" elapsed="0.004573"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.668758" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:08.668293" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:08.669461" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:08.668975" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:08.779281" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:08.779902" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:08.780348" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.671822" elapsed="0.109620">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:08.669573" elapsed="0.112368">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.782317" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:08.782009" elapsed="0.000570"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:08.669554" elapsed="0.113068">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.783404" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.783696" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:08.783557" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:08.783530" elapsed="0.000337"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.784103" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.784211" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.667444" elapsed="0.116939">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.784499" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.551918" elapsed="0.232727">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:08.785162" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:08.784782" elapsed="0.000523"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:08.784756" elapsed="0.000585"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:08.785390" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:08.542786" elapsed="0.242757">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.843228" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:11.842519" elapsed="0.000796"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:11.844506" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.844226" elapsed="0.000360">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:11.844789" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:11.843689" elapsed="0.001226"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.845958" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:11.845263" elapsed="0.000743"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:11.846594" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:11.846992" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:11.846343" elapsed="0.000695"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.847740" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:11.847371" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.849175" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:11.848908" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.849660" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:11.849385" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.850394" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:11.850091" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:11.851267" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:11.851039" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:11.851346" elapsed="0.000041"/>
</return>
<msg time="2026-08-15T23:45:11.851516" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:11.850607" elapsed="0.000934"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:11.851716" elapsed="0.000305"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:11.849953" elapsed="0.002129"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.852792" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:11.852370" elapsed="0.000466"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:11.853575" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:11.853357" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:11.853651" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:11.853825" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:11.853030" elapsed="0.000825"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:11.854024" elapsed="0.000230"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:11.852206" elapsed="0.002089"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:11.849743" elapsed="0.004588"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:11.854388" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:11.854574" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:11.848521" elapsed="0.006080"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:11.848057" elapsed="0.006616"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.855050" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:11.854739" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:11.848007" elapsed="0.007182"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.856364" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:11.855503" elapsed="0.000910"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:11.856557" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:11.840557" elapsed="0.016310"/>
</kw>
<msg time="2026-08-15T23:45:11.857046" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:11.825679" elapsed="0.031432"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.871037" elapsed="0.000078"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.885817" elapsed="0.000087"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.898884" elapsed="0.000074"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.899216" 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-08-15T23:45:11.899405" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.900002" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:11.899733" elapsed="0.000418"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:11.899714" elapsed="0.000519"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.900418" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.900737" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.901114" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:11.899672" elapsed="0.001645"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:11.899495" elapsed="0.001854"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.901500" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:11.901583" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:45:11.901784" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:11.821139" elapsed="0.080704"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:11.903790" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.903279" elapsed="0.000743">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:11.904217" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:11.902621" elapsed="0.001622"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.904620" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:11.904328" elapsed="0.000647"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.905752" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:11.905213" elapsed="0.000602"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:11.905012" elapsed="0.000918"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:11.904305" elapsed="0.001651"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.912764" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:11.906116" elapsed="0.006748"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:11.912941" elapsed="0.000053"/>
</return>
<msg time="2026-08-15T23:45:11.913144" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:11.902254" elapsed="0.010916"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:11.915151" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.914586" elapsed="0.000768">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:11.915540" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:11.913993" elapsed="0.001574"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:11.915828" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-08-15T23:45:11.915648" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:11.915626" elapsed="0.000296"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.916074" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:11.916251" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:11.916320" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:11.918557" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:11.913585" elapsed="0.005000"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.920437" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:11.919921" elapsed="0.000568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:11.921139" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:11.920644" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:12.023226" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:12.023843" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:12.024319" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.923840" elapsed="0.101477">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:11.921261" elapsed="0.104523">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:12.026353" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:12.025939" elapsed="0.000803"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:11.921241" elapsed="0.105604">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:12.028206" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:12.028634" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:12.028541" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:12.028498" elapsed="0.000282"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:12.029155" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:12.029316" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.919041" elapsed="0.110523">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:12.029738" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.796490" elapsed="0.233535">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:12.030632" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:12.030233" elapsed="0.000560"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:12.030195" elapsed="0.000732"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:12.031010" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:11.786716" elapsed="0.244524">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.088602" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:15.087957" elapsed="0.000704"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:15.089765" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.089484" elapsed="0.000382">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:15.090067" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:15.089032" elapsed="0.001079"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.091177" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:15.090457" elapsed="0.000768"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:15.091832" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:15.092096" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:15.091563" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.092912" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:15.092487" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.094172" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:15.093910" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.094719" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:15.094442" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.095450" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:15.095142" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:15.096301" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:15.096076" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:15.096381" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:45:15.096573" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:15.095660" elapsed="0.000938"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:15.096750" elapsed="0.000266"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:15.095006" elapsed="0.002051"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.097601" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:15.097304" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:15.098345" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:15.098136" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:15.098419" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:15.098569" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:15.097822" elapsed="0.000771"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:15.098738" elapsed="0.000236"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:15.097173" elapsed="0.001841"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:15.094825" elapsed="0.004224"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:15.099095" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:45:15.099250" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:15.093564" elapsed="0.005711"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:15.093165" elapsed="0.006168"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.099602" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:15.099393" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:15.093118" elapsed="0.006617"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.101049" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:15.100061" elapsed="0.001037"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:15.101228" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:15.086370" elapsed="0.015090"/>
</kw>
<msg time="2026-08-15T23:45:15.101628" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:15.071955" elapsed="0.029727"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.114493" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.127102" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.140123" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.140329" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.140514" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.141010" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:15.140773" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:15.140757" elapsed="0.000475"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.141408" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.141722" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.142095" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:15.140726" elapsed="0.001564"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.140590" elapsed="0.001729"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.142467" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.142545" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:15.142667" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:15.067399" elapsed="0.075296"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:15.144323" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.143941" elapsed="0.000610">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:15.144733" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:15.143412" elapsed="0.001346"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.145145" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:15.144894" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.146063" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:15.145486" elapsed="0.000618"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:15.145309" elapsed="0.000906"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:15.144873" elapsed="0.001367"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.153209" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:15.146391" elapsed="0.006846"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:15.153291" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:15.153448" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:15.143074" elapsed="0.010399"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:15.155105" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.154645" elapsed="0.000646">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:15.155532" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:15.154156" elapsed="0.001401"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:15.155768" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-08-15T23:45:15.155630" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:15.155611" elapsed="0.000259"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.156016" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.156187" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.156254" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:15.158419" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:15.153830" elapsed="0.004616"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.160146" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:15.159643" elapsed="0.000551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:15.160982" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:15.160346" elapsed="0.000682"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:15.255250" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:15.255840" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:15.256281" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.163746" elapsed="0.093529">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:15.161098" elapsed="0.096644">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.258302" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:15.257902" elapsed="0.000796"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:15.161078" elapsed="0.097683">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.259939" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.260258" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:15.260169" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:15.260128" elapsed="0.000274"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.260834" elapsed="0.000057"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.260975" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.158831" elapsed="0.102300">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.261241" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.043698" elapsed="0.217822">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:15.261957" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:15.261658" elapsed="0.000410"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:15.261633" elapsed="0.000469"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:15.262150" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:15.032337" elapsed="0.229957">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.316672" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:18.316062" elapsed="0.000666"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:18.317874" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.317553" elapsed="0.000404">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:18.318177" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:18.317103" elapsed="0.001120"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.319285" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:18.318567" elapsed="0.000765"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:18.319934" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:18.320200" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:18.319665" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.320987" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.320570" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.322285" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.321986" elapsed="0.000345"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.322762" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.322489" elapsed="0.000299"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.323546" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:18.323245" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:18.324315" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.324094" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:18.324393" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:45:18.324557" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:18.323755" elapsed="0.000827"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.324732" elapsed="0.000278"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:18.323109" elapsed="0.001942"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.325661" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:18.325296" elapsed="0.000391"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:18.326431" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.326221" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:18.326507" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:18.326656" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:18.325891" elapsed="0.000790"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.326845" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:18.325167" elapsed="0.001943"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:18.322925" elapsed="0.004220"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:18.327190" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:18.327346" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:18.321643" elapsed="0.005728"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.321241" elapsed="0.006189"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.327697" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.327489" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.321195" elapsed="0.006661"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.329149" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:18.328166" elapsed="0.001030"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:18.329329" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:18.314466" elapsed="0.015096"/>
</kw>
<msg time="2026-08-15T23:45:18.329729" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:18.299945" elapsed="0.029838"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.342588" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.355264" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.368011" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.368211" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.368385" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.368931" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.368694" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:18.368678" elapsed="0.000476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.369331" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.369648" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.370027" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:18.368646" elapsed="0.001598"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.368505" elapsed="0.001769"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.370421" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.370499" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:18.370625" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:18.295561" elapsed="0.075090"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:18.372316" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.371890" elapsed="0.000620">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:18.372691" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:18.371357" elapsed="0.001360"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.373101" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.372789" elapsed="0.000451"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.373990" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:18.373445" elapsed="0.000586"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.373268" elapsed="0.000872"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.372770" elapsed="0.001394"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.381010" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:18.374344" elapsed="0.006694"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:18.381091" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:18.381245" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:18.371029" elapsed="0.010241"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:18.382852" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.382460" elapsed="0.000577">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:18.383216" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:18.381935" elapsed="0.001307"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:18.383452" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:45:18.383315" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.383296" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.383677" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.383951" elapsed="0.000023"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.384055" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:45:18.386171" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:18.381597" elapsed="0.004613"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.387874" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.387404" elapsed="0.000518"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.388643" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.388183" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:18.489484" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:18.490064" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:18.490599" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.391017" elapsed="0.100559">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:18.388757" elapsed="0.103307">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.492557" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.492154" elapsed="0.000899"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:18.388739" elapsed="0.104388">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.494364" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.494684" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:18.494595" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:18.494553" elapsed="0.000331"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.495246" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.495404" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.386569" elapsed="0.109086">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.495869" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.272322" elapsed="0.223775">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.496698" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.496301" elapsed="0.000607"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:18.496264" elapsed="0.000701"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.497039" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.263331" elapsed="0.233934">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:45:18.497617" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.970270" elapsed="32.527604">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.948938" elapsed="32.549199">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.507364" elapsed="0.000032"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.507737" elapsed="0.000026"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.507943" elapsed="0.000023"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:45:18.507536" elapsed="0.000475"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.507463" elapsed="0.000584"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:45:18.509589" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:45:18.509272" elapsed="0.000347"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.510427" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.509828" elapsed="0.000632"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:18.529618" elapsed="0.000929"/>
</kw>
<msg time="2026-08-15T23:45:18.530780" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:18.529232" elapsed="0.001639"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:18.528793" elapsed="0.002157"/>
</kw>
<msg time="2026-08-15T23:45:18.530993" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:18.519936" elapsed="0.011117"/>
</kw>
<msg time="2026-08-15T23:45:18.531155" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:18.519561" elapsed="0.011619"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.576078" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:18.575368" elapsed="0.000823"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:18.577878" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:18.577310" elapsed="0.000689">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:18.578145" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:18.576500" elapsed="0.001753"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.579793" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:18.578624" elapsed="0.001395"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:18.580629" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:18.581034" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:18.580407" elapsed="0.000744"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.581996" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.581457" elapsed="0.000607"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.584181" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.583893" elapsed="0.000335"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.584712" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.584437" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.585700" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:18.585226" elapsed="0.000501"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:18.586646" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.586417" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:18.586724" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:18.586898" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:18.586045" elapsed="0.000879"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.587091" elapsed="0.000237"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:18.585090" elapsed="0.002280"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.587943" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:18.587617" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:18.588733" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.588519" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:18.588826" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:18.588981" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:18.588175" elapsed="0.000832"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:18.589155" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:18.587487" elapsed="0.001930"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:18.584871" elapsed="0.004602"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:18.589552" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:45:18.589950" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:18.583067" elapsed="0.006974"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.582254" elapsed="0.007870"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.590457" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.590205" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.582231" elapsed="0.008465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.591846" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:18.590862" elapsed="0.001095"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:18.592185" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:18.574317" elapsed="0.018017"/>
</kw>
<msg time="2026-08-15T23:45:18.592422" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:18.561011" elapsed="0.031478"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.605285" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.618103" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.630793" elapsed="0.000048"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.631009" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.631183" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.631600" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.631452" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:18.631436" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.631843" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.632011" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.632173" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:18.631405" elapsed="0.000822"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.631261" elapsed="0.000991"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.632396" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:18.632473" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:18.632593" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:18.556557" elapsed="0.076063"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.633760" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.633498" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:18.654927" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:18.655015" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:18.655188" 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-08-15T23:45:18.636170" elapsed="0.019084"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.633899" elapsed="0.021445"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.655743" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.655403" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.633881" elapsed="0.022093"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.664723" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.658770" elapsed="0.006096"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.658218" elapsed="0.006728"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.658175" elapsed="0.006829"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.669077" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:18.665619" elapsed="0.003505"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.665128" elapsed="0.004030"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.665092" elapsed="0.004090"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.669743" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:18.669353" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.670101" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.669866" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.670754" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:18.670353" elapsed="0.000427"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.670183" elapsed="0.000649"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.669847" elapsed="0.001007"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.671373" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:18.671007" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:18.671697" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:18.671468" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:18.672350" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:18.671957" elapsed="0.000420"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:18.671777" elapsed="0.000634"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:18.671449" elapsed="0.000983"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:18.672579" elapsed="0.000489"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:45:18.673591" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:18.673230" elapsed="0.000388"/>
</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-08-15T23:45:18.673767" elapsed="0.005879"/>
</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-08-15T23:45:18.657182" elapsed="0.022529"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:45:18.679757" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:18.682086" 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-08-15T23:45:18.632898" elapsed="0.049215"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:45:18.682167" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:45:18.531399" elapsed="0.150891"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:45:18.508753" elapsed="0.173615"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:45:18.508266" elapsed="0.174156"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.611452" elapsed="33.071057">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:44:45.611036" elapsed="33.071584">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:44:45.610634" elapsed="33.072050">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:44:45.610044" elapsed="33.072737">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.687628" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:19.686755" elapsed="0.000963"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:45:19.687878" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:45:19.688197" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:45:19.685900" elapsed="0.002332"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:19.714944" elapsed="0.000892"/>
</kw>
<msg time="2026-08-15T23:45:19.715985" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:19.714462" elapsed="0.001584"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:19.714063" elapsed="0.002060"/>
</kw>
<msg time="2026-08-15T23:45:19.716165" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:19.705258" elapsed="0.010953"/>
</kw>
<msg time="2026-08-15T23:45:19.716314" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:19.704929" elapsed="0.011409"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.717242" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.716501" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.717687" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.717366" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.752251" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:19.751850" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:19.753168" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:19.752889" elapsed="0.000359">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:19.753345" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:19.752513" elapsed="0.000857"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.754012" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:19.753587" elapsed="0.000454"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:19.754463" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:19.754626" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:19.754317" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.755188" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.754911" elapsed="0.000323"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.756319" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.756052" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.756817" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.756524" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.757519" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.757219" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.758307" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.758077" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.758385" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:19.758546" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.757730" elapsed="0.000841"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.758722" elapsed="0.000297"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:45:19.757085" elapsed="0.001977"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.759624" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.759316" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.760439" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.760208" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.760517" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:19.760673" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.759860" elapsed="0.000846"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.760878" elapsed="0.000238"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:19.759183" elapsed="0.001976"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.761726" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.761410" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.762549" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.762304" elapsed="0.000278"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.762641" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:45:19.762839" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.761966" elapsed="0.000904"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.763098" elapsed="0.000483"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:45:19.761275" elapsed="0.002349"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.764378" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.764059" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.765174" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.764951" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.765253" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:19.765414" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.764600" elapsed="0.000843"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.765634" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:45:19.763749" elapsed="0.002167"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.766457" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.766159" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.767216" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.767006" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.767292" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:19.767441" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.766665" elapsed="0.000801"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.767613" elapsed="0.000238"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:45:19.766030" elapsed="0.001862"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.768429" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.768134" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.769223" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.769012" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.769299" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:19.769471" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.768674" elapsed="0.000827"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.769653" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:45:19.768005" elapsed="0.001931"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.770482" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.770178" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.771267" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.771056" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.771344" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:19.771495" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.770690" elapsed="0.000830"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.771667" elapsed="0.000242"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:45:19.770049" elapsed="0.001901"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.772495" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:19.772193" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:19.773237" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.773030" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:19.773313" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:19.773468" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:19.772701" elapsed="0.000796"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.773654" elapsed="0.000243"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:19.772064" elapsed="0.001876"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:19.756899" elapsed="0.017076"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:19.774020" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:19.774185" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:19.755678" elapsed="0.018535"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:19.755361" elapsed="0.018886"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.774420" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.774272" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:19.755336" elapsed="0.019199"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.775693" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:19.774740" elapsed="0.000982"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:19.775841" elapsed="0.000056"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:19.750722" elapsed="0.025406"/>
</kw>
<msg time="2026-08-15T23:45:19.776221" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:19.736695" elapsed="0.039627"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.799676" elapsed="0.000036"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.822613" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.845491" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.845747" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.845982" elapsed="0.000032"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.846605" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.846335" elapsed="0.000358"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:19.846319" elapsed="0.000462"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.847069" elapsed="0.000047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.847405" elapsed="0.000045"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.847733" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:19.846284" elapsed="0.001644"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:19.846139" elapsed="0.001851"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.848142" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:19.848295" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:45:19.848435" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:19.732144" elapsed="0.116318"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.877436" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:19.877046" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:19.878306" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:19.878047" elapsed="0.000338">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:19.878480" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:19.877678" elapsed="0.000827"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.879186" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:19.878723" elapsed="0.000490"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:19.879571" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:19.879732" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:19.879425" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.880255" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.880002" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:45:19.880740" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.880428" elapsed="0.000396"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.881297" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:19.880998" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:19.880852" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:19.880406" elapsed="0.000976"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.882343" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:19.881578" elapsed="0.000796"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:19.882475" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:19.876031" elapsed="0.006745"/>
</kw>
<msg time="2026-08-15T23:45:19.882906" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:19.861957" elapsed="0.021067"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.906712" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.929987" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.952585" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.952902" elapsed="0.000030"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.953145" elapsed="0.000025"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.953754" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.953476" elapsed="0.000392"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:19.953460" elapsed="0.000505"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.954198" elapsed="0.000047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.954545" elapsed="0.000047"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.954906" elapsed="0.000046"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:19.953425" elapsed="0.001672"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:19.953281" elapsed="0.001879"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.955313" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:19.955468" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:45:19.955602" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:19.859063" elapsed="0.096569"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:19.958340" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:19.957697" elapsed="0.000774">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:19.958605" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:19.956412" elapsed="0.002219"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.959202" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.958742" elapsed="0.000616"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.960604" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:19.959942" elapsed="0.000703"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:19.959386" elapsed="0.001340"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:19.958722" elapsed="0.002030"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.963775" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:19.960959" elapsed="0.002884"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:19.964001" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:19.964167" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:19.956052" elapsed="0.008141"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.966069" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.965544" elapsed="0.000591"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.966776" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.966302" elapsed="0.000570"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.967554" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.967071" elapsed="0.000546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.968290" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.967783" elapsed="0.000569"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:45:19.969931" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:45:19.969280" elapsed="0.000767"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:45:19.970938" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:45:19.970317" elapsed="0.000741"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:19.971323" elapsed="0.000562"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:19.972902" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:19.972155" elapsed="0.000944"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:45:19.973186" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:45:19.973463" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:45:19.968570" elapsed="0.004919"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:19.995987" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:45:19.996180" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:19.996547" 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-08-15T23:45:19.982326" elapsed="0.014315"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:19.973601" elapsed="0.023364"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:19.997486" elapsed="0.000178"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:19.997040" elapsed="0.000972"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:19.973582" elapsed="0.024500"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.005104" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:20.001462" elapsed="0.003737"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:20.000758" elapsed="0.004509"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.000710" elapsed="0.004655"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.009326" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:20.006254" elapsed="0.003143"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:20.005485" elapsed="0.003960"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.005442" elapsed="0.004073"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.011160" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:20.010071" elapsed="0.001192"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.011988" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.011466" elapsed="0.000619"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.013004" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:20.012501" elapsed="0.000541"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:20.012155" elapsed="0.000937"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.011431" elapsed="0.001727"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.014683" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:20.013660" elapsed="0.001126"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.015593" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.015107" elapsed="0.000614"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.016605" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:20.016150" elapsed="0.000491"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:20.015791" elapsed="0.000900"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.015073" elapsed="0.001685"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:20.017096" elapsed="0.000832"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:45:20.018960" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:20.018204" elapsed="0.000892"/>
</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-08-15T23:45:20.019368" elapsed="0.002821"/>
</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-08-15T23:45:19.999384" elapsed="0.022923"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:45:20.022560" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-08-15T23:45:20.022403" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.022379" elapsed="0.000334"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.022916" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.023042" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:20.025432" 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-08-15T23:45:19.964611" elapsed="0.060849"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:45:20.025527" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:20.025684" 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-08-15T23:45:19.720763" elapsed="0.304946"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.026127" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.025848" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.025792" elapsed="0.000436"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:45:20.026260" elapsed="0.000026"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:45:19.718032" elapsed="0.308352"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:19.717780" elapsed="0.308649"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:19.717345" elapsed="0.309108"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.026599" elapsed="0.000274"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:45:19.689214" elapsed="0.337725"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:45:19.688407" elapsed="0.338708"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.027773" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.027284" elapsed="0.000536"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:20.046900" elapsed="0.000824"/>
</kw>
<msg time="2026-08-15T23:45:20.047786" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:20.046518" elapsed="0.001356"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:20.046122" elapsed="0.001830"/>
</kw>
<msg time="2026-08-15T23:45:20.047996" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:20.037087" elapsed="0.010954"/>
</kw>
<msg time="2026-08-15T23:45:20.048145" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:20.036734" elapsed="0.011435"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.098930" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:20.098262" elapsed="0.000724"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:20.100135" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.099850" elapsed="0.000367">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:20.100417" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:20.099365" elapsed="0.001098"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.101500" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:20.100895" elapsed="0.000652"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:20.102233" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:20.102501" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:20.101975" elapsed="0.000571"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.103293" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:20.102895" elapsed="0.000495"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.104643" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:20.104387" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.105133" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.104861" elapsed="0.000298"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.106073" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:20.105536" elapsed="0.000563"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:20.106950" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.106628" elapsed="0.000349"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:20.107125" elapsed="0.000043"/>
</return>
<msg time="2026-08-15T23:45:20.107305" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:20.106287" elapsed="0.001043"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.107485" elapsed="0.000252"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:20.105395" elapsed="0.002386"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.108351" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:20.108048" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:20.109120" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.108908" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:20.109196" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:20.109343" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:20.108576" elapsed="0.000792"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:20.109514" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:20.107916" elapsed="0.001859"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:20.105214" elapsed="0.004611"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:20.109870" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:20.110027" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:20.104053" elapsed="0.006000"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:20.103556" elapsed="0.006557"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.110382" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.110174" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.103506" elapsed="0.007010"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.111661" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:20.110838" elapsed="0.000871"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:20.111859" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:20.096514" elapsed="0.015579"/>
</kw>
<msg time="2026-08-15T23:45:20.112332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:20.081962" elapsed="0.030427"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.125086" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.137832" elapsed="0.000040"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.150449" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.150736" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.150935" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.151482" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.151262" elapsed="0.000362"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:20.151245" elapsed="0.000460"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.151907" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.152223" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.152570" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:20.151206" elapsed="0.001564"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.151021" elapsed="0.001919"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.153093" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.153172" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:45:20.153325" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:20.077540" elapsed="0.075819"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:20.155124" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.154643" elapsed="0.000677">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:20.155501" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:20.154107" elapsed="0.001419"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.155877" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.155598" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.156714" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:20.156222" elapsed="0.000531"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:20.156043" elapsed="0.000888"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.155579" elapsed="0.001378"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.163741" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:20.157106" elapsed="0.006664"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:20.163839" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:45:20.164004" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:20.153729" elapsed="0.010299"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:20.165631" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.165252" elapsed="0.000584">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:20.166016" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:20.164699" elapsed="0.001342"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:20.166253" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:45:20.166115" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:20.166095" elapsed="0.000287"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.166530" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.166699" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.166765" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:20.168756" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:20.164367" elapsed="0.004415"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.170506" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:20.170042" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:20.171187" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:20.170702" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:20.187737" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:20.188094" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:20.188290" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.173591" elapsed="0.015167">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:20.171300" elapsed="0.017678">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.189186" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.189017" elapsed="0.000339"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:20.171281" elapsed="0.018104">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.189904" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.190044" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:20.190005" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:20.189987" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.190256" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.190326" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.169198" elapsed="0.021239">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.190513" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.053569" elapsed="0.137042">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:20.190901" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:20.190703" elapsed="0.000320"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:20.190686" elapsed="0.000362"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:20.191081" elapsed="0.000016"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.049061" elapsed="0.142137">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.246525" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:23.245846" elapsed="0.000735"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:23.247779" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.247498" elapsed="0.000387">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:23.248111" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:23.246993" elapsed="0.001166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.249230" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:23.248525" elapsed="0.000775"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:23.250157" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:23.250447" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:23.249679" elapsed="0.000814"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.251261" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:23.250852" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.252750" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:23.252443" elapsed="0.000356"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.253319" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:23.253001" elapsed="0.000358"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.254121" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:23.253742" elapsed="0.000410"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:23.255042" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:23.254703" elapsed="0.000368"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:23.255144" elapsed="0.000044"/>
</return>
<msg time="2026-08-15T23:45:23.255323" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:23.254358" elapsed="0.000993"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:23.255533" elapsed="0.000250"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:23.253605" elapsed="0.002254"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.256479" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:23.256135" elapsed="0.000372"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:23.257544" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:23.257276" elapsed="0.000299"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:23.257628" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:23.257875" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:23.256695" elapsed="0.001207"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:23.258056" elapsed="0.000257"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:23.255985" elapsed="0.002372"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:23.253418" elapsed="0.004975"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:23.258463" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:45:23.258633" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:23.252071" elapsed="0.006588"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:23.251550" elapsed="0.007170"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.259045" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:23.258780" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:23.251501" elapsed="0.007699"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.260422" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:23.259545" elapsed="0.000947"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:23.260636" elapsed="0.000108"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:23.244134" elapsed="0.016822"/>
</kw>
<msg time="2026-08-15T23:45:23.261131" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:23.229438" elapsed="0.031751"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.274702" elapsed="0.000042"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.287983" elapsed="0.000041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.301171" elapsed="0.000038"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.301431" elapsed="0.000029"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.301624" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.302244" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:23.302001" elapsed="0.000421"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:23.301971" elapsed="0.000533"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.302688" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.303139" elapsed="0.000025"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.303534" elapsed="0.000024"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:23.301916" elapsed="0.001821"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.301713" elapsed="0.002057"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.303962" elapsed="0.000026"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.304070" elapsed="0.000023"/>
</return>
<msg time="2026-08-15T23:45:23.304249" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:23.225079" elapsed="0.079198"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:23.306378" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.305843" elapsed="0.000762">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:23.306794" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:23.305163" elapsed="0.001694"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.307247" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:23.306939" elapsed="0.000455"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.308279" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:23.307634" elapsed="0.000688"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:23.307442" elapsed="0.001012"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:23.306919" elapsed="0.001570"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.316082" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:23.308646" elapsed="0.007468"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:23.316179" elapsed="0.000058"/>
</return>
<msg time="2026-08-15T23:45:23.316389" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:23.304717" elapsed="0.011698"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:23.318390" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.317952" elapsed="0.000652">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:23.318843" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:23.317285" elapsed="0.001591"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:23.319104" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:45:23.318955" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:23.318934" elapsed="0.000256"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.319358" elapsed="0.000028"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.319542" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.319613" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:23.321713" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:23.316900" elapsed="0.004843"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.323662" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:23.323147" elapsed="0.000584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:23.324425" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:23.323922" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:23.416404" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:23.417138" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:23.417659" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.326929" elapsed="0.091912">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:23.324545" elapsed="0.094793">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.419964" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:23.419431" elapsed="0.000954"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:23.324526" elapsed="0.095925">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.421557" elapsed="0.000059"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.421896" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:23.421741" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:23.421711" elapsed="0.000308"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.422228" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.422328" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.322170" elapsed="0.100319">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.422600" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.202115" elapsed="0.220666">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:23.423276" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:23.422996" elapsed="0.000402"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:23.422967" elapsed="0.000468"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:23.423481" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:23.192260" elapsed="0.231379">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.482130" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:26.481460" elapsed="0.000742"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:26.483390" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.483097" elapsed="0.000386">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:26.483687" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:26.482601" elapsed="0.001132"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.484774" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:26.484109" elapsed="0.000852"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:26.485574" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:26.485869" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:26.485298" elapsed="0.000622"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.486887" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:26.486334" elapsed="0.000677"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.488389" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:26.488110" elapsed="0.000326"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.488972" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:26.488595" elapsed="0.000405"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.489673" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:26.489373" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:26.490527" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:26.490266" elapsed="0.000288"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:26.490608" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:45:26.490774" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:26.489921" elapsed="0.000894"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:26.490970" elapsed="0.000272"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:26.489238" elapsed="0.002046"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.491853" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:26.491536" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:26.492779" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:26.492563" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:26.492875" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:26.493030" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:26.492071" elapsed="0.000985"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:26.493207" elapsed="0.000244"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:26.491403" elapsed="0.002091"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:26.489056" elapsed="0.004474"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:26.493576" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:26.493737" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:26.487723" elapsed="0.006041"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:26.487207" elapsed="0.006634"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.494132" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:26.493916" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:26.487150" elapsed="0.007167"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.495528" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:26.494674" elapsed="0.000907"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:26.495714" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:26.479788" elapsed="0.016187"/>
</kw>
<msg time="2026-08-15T23:45:26.496150" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:26.464447" elapsed="0.031758"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.509350" elapsed="0.000042"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.522428" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.535547" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.535773" elapsed="0.000043"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.535974" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.536457" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:26.536242" elapsed="0.000356"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:26.536226" elapsed="0.000451"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.536897" 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-08-15T23:45:26.537223" elapsed="0.000027"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.537595" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:26.536196" elapsed="0.001596"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.536052" elapsed="0.001792"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.538015" elapsed="0.000028"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.538104" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:45:26.538229" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:26.459951" elapsed="0.078342"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:26.540006" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.539586" elapsed="0.000628">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:26.540403" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:26.539077" elapsed="0.001358"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.540771" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:26.540510" elapsed="0.000437"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.541760" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:26.541180" elapsed="0.000687"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:26.540980" elapsed="0.001012"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:26.540491" elapsed="0.001534"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.549312" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:26.542184" elapsed="0.007156"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:26.549394" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:26.549553" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:26.538703" elapsed="0.010876"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:26.551259" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.550846" elapsed="0.000602">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:26.551633" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:26.550292" elapsed="0.001367"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:26.551900" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:45:26.551733" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:26.551713" elapsed="0.000271"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.552155" elapsed="0.000025"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.552329" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.552395" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:26.554682" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:26.549959" elapsed="0.004751"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.556428" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:26.555960" elapsed="0.000532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:26.557156" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:26.556650" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:26.668079" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:26.668610" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:26.669179" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.559596" elapsed="0.110526">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:26.557273" elapsed="0.113312">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.671085" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:26.670672" elapsed="0.000804"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:26.557254" elapsed="0.114338">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.672791" elapsed="0.000124"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.673176" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:26.673085" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:26.673046" elapsed="0.000276"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.673647" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.673843" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.555093" elapsed="0.119009">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.674287" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.435689" elapsed="0.238880">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:26.675236" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:26.674781" elapsed="0.000620"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:26.674740" elapsed="0.000717"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:26.675531" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:26.424779" elapsed="0.250980">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.730932" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:29.730289" elapsed="0.000700"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:29.732288" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.731878" elapsed="0.000496">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:29.732578" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:29.731346" elapsed="0.001277"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.733595" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:29.732992" elapsed="0.000651"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:29.734341" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:29.734602" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:29.734087" elapsed="0.000561"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.735398" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:29.735030" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.736772" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:29.736511" elapsed="0.000390"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.737342" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:29.737061" elapsed="0.000307"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.738101" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:29.737739" elapsed="0.000389"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:29.738875" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:29.738630" elapsed="0.000271"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:29.738954" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:45:29.739121" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:29.738313" elapsed="0.000833"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:29.739297" elapsed="0.000253"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:29.737605" elapsed="0.001985"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.740180" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:29.739853" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:29.740934" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:29.740708" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:29.741010" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:29.741160" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:29.740389" elapsed="0.000795"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:29.741330" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:29.739706" elapsed="0.001885"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:29.737426" elapsed="0.004201"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:29.741671" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:45:29.741844" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:29.736182" elapsed="0.005689"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:29.735656" elapsed="0.006274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.742200" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:29.741991" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:29.735607" elapsed="0.006745"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.743644" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:29.742655" elapsed="0.001038"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:29.743848" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:29.728668" elapsed="0.015432"/>
</kw>
<msg time="2026-08-15T23:45:29.744271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:29.714082" elapsed="0.030244"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.757314" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.770114" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.785417" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.785614" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.785785" elapsed="0.000041"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.786277" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:29.786063" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:29.786048" elapsed="0.000455"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.786680" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.787022" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.787375" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:29.786017" elapsed="0.001557"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.785883" elapsed="0.001720"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.787750" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.787858" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:45:29.787986" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:29.709108" elapsed="0.078906"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:29.789687" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.789306" elapsed="0.000607">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:29.790093" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:29.788761" elapsed="0.001357"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.790470" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:29.790189" elapsed="0.000419"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.791328" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:29.790836" elapsed="0.000547"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:29.790636" elapsed="0.000857"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:29.790171" elapsed="0.001347"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.798388" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:29.791669" elapsed="0.006748"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:29.798471" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:29.798629" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:29.788436" elapsed="0.010218"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:29.800322" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.799919" elapsed="0.000589">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:29.800690" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:29.799330" elapsed="0.001386"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:29.800950" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:45:29.800789" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:29.800770" elapsed="0.000265"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.801185" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.801355" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.801421" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:29.803575" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:29.799003" elapsed="0.004600"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.805382" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:29.804889" elapsed="0.000542"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:29.806102" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:29.805597" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:29.899036" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:29.899604" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:29.900063" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.808532" elapsed="0.092595">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:29.806224" elapsed="0.095371">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.902170" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:29.901686" elapsed="0.000902"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:29.806204" elapsed="0.096453">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.904011" elapsed="0.000067"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.904475" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:29.904379" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:29.904321" elapsed="0.000321"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.905034" elapsed="0.000053"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.905203" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.804006" elapsed="0.101528">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.905781" elapsed="0.000140"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.685939" elapsed="0.220166">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:29.906554" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:29.906285" elapsed="0.000375"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:29.906256" elapsed="0.000440"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:29.906745" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:29.677059" elapsed="0.229870">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.965026" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:32.964360" elapsed="0.000730"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:32.966330" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:32.965957" elapsed="0.000457">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:32.966619" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:32.965442" elapsed="0.001224"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.967645" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:32.967038" elapsed="0.000657"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:32.968431" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:32.968712" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:32.968167" elapsed="0.000593"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.969485" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:32.969116" elapsed="0.000471"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.970884" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:32.970595" elapsed="0.000336"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.971459" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:32.971182" elapsed="0.000304"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.972250" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:32.971943" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:32.973038" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:32.972791" elapsed="0.000274"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:32.973119" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:45:32.973286" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:32.972467" elapsed="0.000846"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:32.973464" elapsed="0.000268"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:32.971727" elapsed="0.002066"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.974417" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:32.974096" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:32.975236" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:32.975010" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:32.975314" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:45:32.975477" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:32.974647" elapsed="0.000855"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:32.975667" elapsed="0.000257"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:32.973956" elapsed="0.002012"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:32.971544" elapsed="0.004460"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:32.976051" elapsed="0.000042"/>
</return>
<msg time="2026-08-15T23:45:32.976249" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:32.970264" elapsed="0.006013"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:32.969794" elapsed="0.006548"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:32.976623" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:32.976404" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:32.969710" elapsed="0.007048"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:32.978221" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:32.977092" elapsed="0.001180"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:32.978410" elapsed="0.000092"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:32.962735" elapsed="0.015960"/>
</kw>
<msg time="2026-08-15T23:45:32.978926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:32.947898" elapsed="0.031095"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:32.991945" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.005241" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.018241" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.018443" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.018621" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.019164" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:33.018919" elapsed="0.000393"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:33.018903" elapsed="0.000488"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.019570" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.019936" elapsed="0.000025"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.020290" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:33.018868" elapsed="0.001623"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.018701" elapsed="0.001821"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.020694" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.020782" elapsed="0.000052"/>
</return>
<msg time="2026-08-15T23:45:33.020958" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:32.943342" elapsed="0.077644"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:33.022693" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:33.022289" elapsed="0.000676">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:33.023150" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:33.021703" elapsed="0.001474"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.023508" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:33.023252" elapsed="0.000395"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:33.024455" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:33.023946" elapsed="0.000551"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:33.023676" elapsed="0.000929"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:33.023232" elapsed="0.001399"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:33.031394" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:33.024782" elapsed="0.006642"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:33.031478" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:33.031635" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:33.021351" elapsed="0.010310"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:33.033360" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:33.032975" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:33.033728" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:33.032399" elapsed="0.001387"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:33.034031" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:45:33.033884" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:33.033863" elapsed="0.000257"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.034271" elapsed="0.000024"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.034441" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.034510" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:33.036699" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:33.032066" elapsed="0.004663"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:33.038591" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:33.038089" elapsed="0.000556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:33.039289" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:33.038818" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:33.135730" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:33.136429" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:33.137010" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:33.041635" elapsed="0.096474">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:33.039408" elapsed="0.099156">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.139151" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:33.138659" elapsed="0.000892"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:33.039389" elapsed="0.100231">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.140926" elapsed="0.000068"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.141263" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:33.141170" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:33.141128" elapsed="0.000284"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.141734" elapsed="0.000055"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.142018" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:33.037182" elapsed="0.105100">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.142494" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:32.919507" elapsed="0.223095">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:33.142920" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:33.142699" elapsed="0.000297"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:33.142681" elapsed="0.000341"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:33.143056" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:32.908065" elapsed="0.235097">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.200295" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:36.199637" elapsed="0.000719"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:36.201461" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.201190" elapsed="0.000350">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:36.201749" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:36.200715" elapsed="0.001118"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.202851" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:36.202186" elapsed="0.000720"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:36.203530" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:36.203796" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:36.203244" elapsed="0.000727"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.204674" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:36.204302" elapsed="0.000471"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.206085" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:36.205710" elapsed="0.000422"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.206566" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:36.206292" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.207359" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:36.207043" elapsed="0.000373"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:36.208308" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:36.208073" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:36.208388" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:45:36.208580" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:36.207610" elapsed="0.000998"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:36.208843" elapsed="0.000272"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:36.206887" elapsed="0.002273"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.209729" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:36.209414" elapsed="0.000343"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:36.210535" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:36.210304" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:36.210614" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:36.210766" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:36.209979" elapsed="0.000813"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:36.210980" elapsed="0.000229"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:36.209278" elapsed="0.001973"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:36.206660" elapsed="0.004646"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:36.211363" elapsed="0.000058"/>
</return>
<msg time="2026-08-15T23:45:36.211559" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:36.205369" elapsed="0.006216"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:36.204948" elapsed="0.006698"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.211964" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:36.211713" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:36.204901" elapsed="0.007230"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.213470" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:36.212438" elapsed="0.001086"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:36.213658" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:36.198033" elapsed="0.015888"/>
</kw>
<msg time="2026-08-15T23:45:36.214119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:36.183597" elapsed="0.030583"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.227198" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.240103" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.253385" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.253666" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.253862" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.254359" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:36.254142" elapsed="0.000361"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:36.254125" elapsed="0.000456"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.254759" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.255087" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.255448" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:36.254087" elapsed="0.001559"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.253944" elapsed="0.001733"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.255845" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.255925" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:36.256062" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:36.179240" elapsed="0.076850"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:36.257744" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.257335" elapsed="0.000626">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:36.258144" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:36.256788" elapsed="0.001383"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.258493" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:36.258241" elapsed="0.000390"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.259364" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:36.258857" elapsed="0.000549"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:36.258659" elapsed="0.000898"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:36.258223" elapsed="0.001359"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.266313" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:36.259733" elapsed="0.006608"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:36.266393" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:36.266550" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:36.256453" elapsed="0.010121"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:36.268167" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.267774" elapsed="0.000581">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:36.268537" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:36.267251" elapsed="0.001312"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:36.268769" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-08-15T23:45:36.268633" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:36.268614" elapsed="0.000267"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.269058" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.269225" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.269291" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:36.271494" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:36.266931" elapsed="0.004591"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.273199" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:36.272715" elapsed="0.000532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:36.273882" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:36.273398" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:36.362706" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:36.363308" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:36.363763" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.276238" elapsed="0.088497">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:36.273996" elapsed="0.091239">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.365677" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:36.365321" elapsed="0.000808"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:36.273977" elapsed="0.092219">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.367373" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.367744" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:36.367655" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:36.367614" elapsed="0.000336"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.368293" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.368458" elapsed="0.000040"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.271903" elapsed="0.096834">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.369008" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.153823" elapsed="0.215443">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:36.369944" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:36.369481" elapsed="0.000780"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:36.369440" elapsed="0.000885"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:36.370403" elapsed="0.000036"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:36.144350" elapsed="0.226292">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.429476" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:39.428782" elapsed="0.000750"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:39.430745" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.430436" elapsed="0.000416">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:39.431057" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:39.429909" elapsed="0.001193"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.432185" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:39.431448" elapsed="0.000785"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:39.432875" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:39.433178" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:39.432593" elapsed="0.000636"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.434005" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:39.433569" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.435279" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:39.435017" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.435787" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:39.435482" elapsed="0.000462"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.436688" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:39.436330" elapsed="0.000388"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:39.437611" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:39.437354" elapsed="0.000284"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:39.437691" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:45:39.437888" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:39.436946" elapsed="0.000976"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:39.438082" elapsed="0.000294"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:39.436193" elapsed="0.002226"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.439093" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:39.438709" elapsed="0.000411"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:39.439937" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:39.439684" elapsed="0.000281"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:39.440017" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:39.440189" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:39.439337" elapsed="0.000879"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:39.440367" elapsed="0.000283"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:39.438550" elapsed="0.002142"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:39.436008" elapsed="0.004720"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:39.440774" elapsed="0.000057"/>
</return>
<msg time="2026-08-15T23:45:39.440976" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:39.434670" elapsed="0.006333"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:39.434265" elapsed="0.006817"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.441390" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:39.441161" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:39.434219" elapsed="0.007312"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.442923" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:39.441869" elapsed="0.001102"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:39.443105" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:39.427132" elapsed="0.016208"/>
</kw>
<msg time="2026-08-15T23:45:39.443508" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:39.412364" elapsed="0.031199"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.456739" elapsed="0.000038"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.469708" elapsed="0.000038"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.483206" elapsed="0.000035"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.483439" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.483619" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.484183" elapsed="0.000107"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:39.483955" elapsed="0.000425"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:39.483933" elapsed="0.000545"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.484722" elapsed="0.000033"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.485230" elapsed="0.000042"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.485773" elapsed="0.000203"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:39.483881" elapsed="0.002366"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.483702" elapsed="0.002596"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.486534" elapsed="0.000092"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.486726" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:45:39.487003" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:39.407550" elapsed="0.079493"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:39.489710" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.489141" elapsed="0.000928">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:39.490321" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:39.488227" elapsed="0.002129"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.490859" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:39.490462" elapsed="0.000589"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.492133" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:39.491356" elapsed="0.000834"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:39.491097" elapsed="0.001245"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:39.490436" elapsed="0.001946"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.501686" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:39.492606" elapsed="0.009128"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:39.501986" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:45:39.502275" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:39.487648" elapsed="0.014664"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:39.505066" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.504454" elapsed="0.000880">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:39.505571" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:39.503656" elapsed="0.001943"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:39.505873" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:45:39.505690" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:39.505667" elapsed="0.000296"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.506135" elapsed="0.000025"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.506316" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.506385" elapsed="0.000023"/>
</return>
<msg time="2026-08-15T23:45:39.508848" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:39.502920" elapsed="0.005958"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.510711" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:39.510214" elapsed="0.000548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:39.511404" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:39.510933" elapsed="0.000587"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:39.607869" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:39.608436" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:39.609001" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.513969" elapsed="0.095921">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:39.511598" elapsed="0.098576">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.610498" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:39.610231" elapsed="0.000548"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:39.511575" elapsed="0.099292">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.611568" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.611772" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:39.611714" elapsed="0.000149"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:39.611688" elapsed="0.000206"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.612096" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.612195" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.509303" elapsed="0.103047">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.612457" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.382604" elapsed="0.229990">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:39.613047" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:39.612720" elapsed="0.000458"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:39.612697" elapsed="0.000518"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:39.613262" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:39.371992" elapsed="0.241414">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.672339" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:42.671633" elapsed="0.000762"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:42.673644" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.673372" elapsed="0.000351">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:42.674016" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:42.672876" elapsed="0.001210"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.675238" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:42.674432" elapsed="0.000855"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:42.675929" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:42.676216" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:42.675626" elapsed="0.000638"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.677038" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:42.676595" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.678487" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:42.678189" elapsed="0.000351"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.679106" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:42.678715" elapsed="0.000419"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.679833" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:42.679506" elapsed="0.000358"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:42.680604" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:42.680378" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:42.680689" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:45:42.680896" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:42.680056" elapsed="0.000866"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:42.681076" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:42.679370" elapsed="0.001991"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.681938" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:42.681609" elapsed="0.000355"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:42.682693" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:42.682481" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:42.682820" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:45:42.682976" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:42.682149" elapsed="0.000853"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:42.683151" elapsed="0.000227"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:42.681478" elapsed="0.001941"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:42.679191" elapsed="0.004262"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:42.683497" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:42.683657" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:42.677778" elapsed="0.005907"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:42.677335" elapsed="0.006409"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.684050" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:42.683827" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:42.677288" elapsed="0.006898"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.685542" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:42.684486" elapsed="0.001140"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:42.685763" elapsed="0.000106"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:42.669956" elapsed="0.016083"/>
</kw>
<msg time="2026-08-15T23:45:42.686213" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:42.655712" elapsed="0.030557"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.699314" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.712106" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.724962" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.725162" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.725337" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.725847" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:42.725603" elapsed="0.000394"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:42.725587" elapsed="0.000487"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.726253" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.726565" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.726968" elapsed="0.000024"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:42.725555" elapsed="0.001615"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.725416" elapsed="0.001784"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.727347" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.727426" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:42.727551" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:42.651119" elapsed="0.076458"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:42.729301" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.728906" elapsed="0.000590">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:42.729682" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:42.728362" elapsed="0.001348"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.730139" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:42.729784" elapsed="0.000498"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.731095" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:42.730492" elapsed="0.000648"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:42.730311" elapsed="0.000939"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:42.729764" elapsed="0.001511"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.738095" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:42.731430" elapsed="0.006709"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:42.738199" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:45:42.738364" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:42.728023" elapsed="0.010367"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:42.740146" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.739719" elapsed="0.000632">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:42.740536" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:42.739214" elapsed="0.001348"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:42.740783" elapsed="0.000113"/>
</return>
<status status="PASS" start="2026-08-15T23:45:42.740637" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:42.740617" elapsed="0.000350"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.741122" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.741319" elapsed="0.000024"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.741389" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:42.743620" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:42.738721" elapsed="0.004928"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.745414" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:42.744911" elapsed="0.000552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:42.746131" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:42.745617" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:42.842116" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:42.842719" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:42.843247" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.748583" elapsed="0.095695">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:42.746258" elapsed="0.098641">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.845398" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:42.844992" elapsed="0.000853"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:42.746228" elapsed="0.099690">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.847214" elapsed="0.000068"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.847543" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:42.847454" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:42.847413" elapsed="0.000272"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.847923" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.848023" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.744034" elapsed="0.104147">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.848289" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.624620" elapsed="0.223810">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:42.848856" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:42.848559" elapsed="0.000401"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:42.848534" elapsed="0.000461"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:42.849040" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:42.614741" elapsed="0.234439">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.905247" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:45.904596" elapsed="0.000707"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:45.906485" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.906173" elapsed="0.000399">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:45.906786" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:45.905671" elapsed="0.001228"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.908018" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:45.907262" elapsed="0.000814"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:45.908833" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:45.909249" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:45.908504" elapsed="0.000793"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.910082" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:45.909641" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.911375" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:45.911112" elapsed="0.000311"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.911885" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:45.911581" elapsed="0.000331"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.912691" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:45.912283" elapsed="0.000436"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:45.913543" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:45.913321" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:45.913627" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:45:45.913790" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:45.912996" elapsed="0.000852"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:45.914000" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:45.912147" elapsed="0.002134"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.914849" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:45.914524" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:45.915576" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:45.915367" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:45.915650" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:45.915813" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:45.915056" elapsed="0.000783"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:45.915990" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:45.914395" elapsed="0.001855"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:45.911966" elapsed="0.004318"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:45.916327" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:45:45.916501" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:45.910749" elapsed="0.005779"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:45.910343" elapsed="0.006247"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.916885" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:45.916655" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:45.910296" elapsed="0.006724"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.918304" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:45.917322" elapsed="0.001031"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:45.918486" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:45.902961" elapsed="0.015787"/>
</kw>
<msg time="2026-08-15T23:45:45.918944" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:45.888462" elapsed="0.030537"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.933610" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.946228" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.958878" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.959074" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.959244" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.959714" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:45.959500" elapsed="0.000384"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:45.959484" elapsed="0.000477"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.960140" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.960469" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.960837" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:45.959454" elapsed="0.001579"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:45.959319" elapsed="0.001743"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.961207" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:45.961283" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:45.961402" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:45.884096" elapsed="0.077333"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:45.963032" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.962627" elapsed="0.000589">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:45.963394" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:45.962134" elapsed="0.001286"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.963734" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:45.963492" elapsed="0.000423"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.964655" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:45.964122" elapsed="0.000575"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:45.963946" elapsed="0.000881"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:45.963473" elapsed="0.001380"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.971432" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:45.965004" elapsed="0.006456"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:45.971512" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:45.971667" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:45.961787" elapsed="0.009905"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:45.973332" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.972963" elapsed="0.000552">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:45.973693" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:45.972362" elapsed="0.001357"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:45.973944" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:45:45.973790" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:45.973771" elapsed="0.000256"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.974169" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:45.974335" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:45.974400" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:45.976561" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:45.972037" elapsed="0.004552"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.978271" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:45.977817" elapsed="0.000501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:45.978936" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:45.978467" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:46.081078" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:46.081607" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:46.082041" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.981285" elapsed="0.101709">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:45.979047" elapsed="0.104377">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:46.083914" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:46.083505" elapsed="0.000794"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:45.979029" elapsed="0.105333">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:46.085477" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:46.085932" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:46.085769" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:46.085729" elapsed="0.000352"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:46.086401" elapsed="0.000059"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:46.086585" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.976992" elapsed="0.109884">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:46.087053" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.860915" elapsed="0.226362">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:46.087944" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:46.087480" elapsed="0.000628"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:46.087443" elapsed="0.000720"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:46.088235" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:45.850668" elapsed="0.237790">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.147419" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:49.146752" elapsed="0.000724"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:49.148665" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.148362" elapsed="0.000388">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:49.148983" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:49.147873" elapsed="0.001165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.150185" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:49.149391" elapsed="0.000846"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:49.150879" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:49.151158" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:49.150589" elapsed="0.000618"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.152010" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:49.151564" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.153372" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:49.153101" elapsed="0.000318"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.153964" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:49.153641" elapsed="0.000351"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.154703" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:49.154389" elapsed="0.000343"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:49.155587" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:49.155352" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:49.155678" elapsed="0.000040"/>
</return>
<msg time="2026-08-15T23:45:49.155868" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:49.155023" elapsed="0.000871"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:49.156047" elapsed="0.000254"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:49.154252" elapsed="0.002090"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.156951" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:49.156600" elapsed="0.000379"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:49.157698" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:49.157476" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:49.157778" elapsed="0.000046"/>
</return>
<msg time="2026-08-15T23:45:49.157950" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:49.157163" elapsed="0.000813"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:49.158152" elapsed="0.000226"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:49.156459" elapsed="0.001960"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:49.154047" elapsed="0.004408"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:49.158500" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:49.158662" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:49.152724" elapsed="0.005969"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:49.152275" elapsed="0.006479"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.159068" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:49.158841" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:49.152227" elapsed="0.006980"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.160535" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:49.159525" elapsed="0.001059"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:49.160728" elapsed="0.000099"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:49.145001" elapsed="0.015996"/>
</kw>
<msg time="2026-08-15T23:45:49.161170" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:49.129763" elapsed="0.031462"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.174577" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.187455" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.200765" elapsed="0.000054"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.200991" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.201164" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.201639" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:49.201426" elapsed="0.000367"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:49.201410" elapsed="0.000486"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.202095" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.202412" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.202768" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:49.201378" elapsed="0.001610"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.201241" elapsed="0.001778"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.203191" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.203273" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:49.203398" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:49.125361" elapsed="0.078064"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:49.205086" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.204668" elapsed="0.000606">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:49.205457" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:49.204161" elapsed="0.001323"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.205842" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:49.205557" elapsed="0.000427"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.206777" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:49.206241" elapsed="0.000651"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:49.206013" elapsed="0.000989"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:49.205538" elapsed="0.001489"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.213946" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:49.207180" elapsed="0.006795"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:49.214028" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:45:49.214224" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:49.203832" elapsed="0.010418"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:49.215972" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.215533" elapsed="0.000624">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:49.216383" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:49.215010" elapsed="0.001410"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:49.216639" elapsed="0.000046"/>
</return>
<status status="PASS" start="2026-08-15T23:45:49.216497" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:49.216477" elapsed="0.000275"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.216979" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.217152" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.217219" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:49.219411" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:49.214605" elapsed="0.004850"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.221232" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:49.220735" elapsed="0.000546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:49.221994" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:49.221445" elapsed="0.000597"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:49.315769" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:49.316391" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:49.316850" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.224456" elapsed="0.093383">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:49.222131" elapsed="0.096212">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.318798" elapsed="0.000100"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:49.318434" elapsed="0.000817"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:49.222110" elapsed="0.097209">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.320578" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.320940" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:49.320847" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:49.320770" elapsed="0.000317"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.321425" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.321590" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.219885" elapsed="0.102014">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.322078" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.098687" elapsed="0.223746">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:49.323089" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:49.322649" elapsed="0.000615"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:49.322610" elapsed="0.000726"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:49.323414" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:49.089609" elapsed="0.234063">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.380373" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:52.379748" elapsed="0.000681"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:52.381538" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.381255" elapsed="0.000364">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:52.381859" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:52.380780" elapsed="0.001125"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.383082" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:52.382459" elapsed="0.000670"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:52.383742" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:52.384151" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:52.383465" elapsed="0.000732"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.384905" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.384524" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.386199" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.385939" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.386669" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.386399" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.387380" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:52.387082" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:52.388165" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.387942" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:52.388244" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:45:52.388403" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:52.387587" elapsed="0.000841"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.388585" elapsed="0.000303"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:52.386948" elapsed="0.001982"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.389542" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:52.389176" elapsed="0.000393"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:52.390302" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.390084" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:52.390380" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:52.390531" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:52.389752" elapsed="0.000804"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.390706" elapsed="0.000244"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:52.389045" elapsed="0.001947"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:52.386750" elapsed="0.004278"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:52.391071" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:52.391228" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:52.385555" elapsed="0.005700"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.385158" elapsed="0.006155"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.391583" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.391372" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.385113" elapsed="0.006632"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.392874" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:52.392071" elapsed="0.000852"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:52.393055" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:52.378180" elapsed="0.015105"/>
</kw>
<msg time="2026-08-15T23:45:52.393454" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:52.363941" elapsed="0.029568"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.406498" elapsed="0.000041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.419167" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.431764" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.431991" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.432165" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.432720" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.432493" elapsed="0.000397"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:52.432476" elapsed="0.000491"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.433144" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.433456" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.433823" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:52.432442" elapsed="0.001583"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.432296" elapsed="0.001759"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.434203" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.434281" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:45:52.434408" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:52.359643" elapsed="0.074792"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:52.436129" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.435681" elapsed="0.000644">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:52.436506" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:52.435155" elapsed="0.001376"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.436889" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.436613" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.437722" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:52.437233" elapsed="0.000528"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.437054" elapsed="0.000888"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.436594" elapsed="0.001374"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.444735" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:52.438121" elapsed="0.006641"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:52.444830" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:52.444986" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:52.434791" elapsed="0.010221"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:52.446601" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.446228" elapsed="0.000561">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:52.446994" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:52.445659" elapsed="0.001360"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:52.447231" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:45:52.447093" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.447074" elapsed="0.000241"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.447459" elapsed="0.000021"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.447626" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.447733" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:52.449979" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:52.445338" elapsed="0.004669"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.451681" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.451216" elapsed="0.000513"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.452386" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.451929" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:52.546342" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:52.546913" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:52.547343" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.454788" elapsed="0.093526">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:52.452500" elapsed="0.096248">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.549235" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.548881" elapsed="0.000743"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:52.452482" elapsed="0.097205">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.550747" elapsed="0.000173"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.551172" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:52.551089" elapsed="0.000175"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:52.551049" elapsed="0.000263"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.551629" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.551782" elapsed="0.000115"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.450372" elapsed="0.101740">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.552280" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.333881" elapsed="0.218613">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.553129" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.552693" elapsed="0.000597"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:52.552657" elapsed="0.000685"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.553413" elapsed="0.000032"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.324776" elapsed="0.228855">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:45:52.553966" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.048332" elapsed="32.505845">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:45:20.027966" elapsed="32.526461">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.564508" elapsed="0.000034"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.564874" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.565062" elapsed="0.000022"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:45:52.564668" elapsed="0.000460"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.564604" elapsed="0.000550"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:45:52.566552" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:45:52.566279" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.567194" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.566742" elapsed="0.000479"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:52.586017" elapsed="0.000853"/>
</kw>
<msg time="2026-08-15T23:45:52.587096" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:52.585641" elapsed="0.001524"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:52.585228" elapsed="0.002013"/>
</kw>
<msg time="2026-08-15T23:45:52.587283" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:52.576402" elapsed="0.010937"/>
</kw>
<msg time="2026-08-15T23:45:52.587439" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:52.576048" elapsed="0.011416"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.631441" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:52.630748" elapsed="0.000807"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:52.633186" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:52.632647" elapsed="0.000653">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:52.633425" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:52.631897" elapsed="0.001634"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.635030" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:52.633896" elapsed="0.001241"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:52.635728" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:52.636281" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:52.635514" elapsed="0.000876"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.637378" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.636695" elapsed="0.000746"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.639396" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.639130" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.639949" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.639643" elapsed="0.000333"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.640944" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:52.640435" elapsed="0.000535"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:52.641731" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.641507" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:52.641914" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:45:52.642079" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:52.641157" elapsed="0.000947"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.642255" elapsed="0.000237"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:52.640299" elapsed="0.002234"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.643123" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:52.642778" elapsed="0.000371"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:52.643920" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.643668" elapsed="0.000279"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:52.643995" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:52.644144" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:52.643329" elapsed="0.000840"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:52.644316" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:52.642649" elapsed="0.001927"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:52.640083" elapsed="0.004549"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:52.644698" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:45:52.645090" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:52.638317" elapsed="0.006864"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.637621" elapsed="0.007635"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.645554" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.645336" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.637598" elapsed="0.008195"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.646935" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:52.645966" elapsed="0.001080"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:52.647275" elapsed="0.000031"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:52.629763" elapsed="0.017659"/>
</kw>
<msg time="2026-08-15T23:45:52.647520" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:52.616827" elapsed="0.030757"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.660451" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.673145" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.685648" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.685854" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.686029" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.686441" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.686294" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:52.686279" elapsed="0.000242"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.686661" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.686846" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.687016" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:52.686248" elapsed="0.000820"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.686106" elapsed="0.000987"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.687235" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:52.687310" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:52.687429" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:52.612426" elapsed="0.075030"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.688620" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.688369" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:52.704715" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:52.704793" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:52.704949" 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-08-15T23:45:52.691023" elapsed="0.013995"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.688732" elapsed="0.016390"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.705520" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.705183" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.688715" elapsed="0.016991"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.714271" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.708418" elapsed="0.005952"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.707917" elapsed="0.006530"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.707849" elapsed="0.006655"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.718755" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:52.715158" elapsed="0.003670"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.714628" elapsed="0.004236"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.714590" elapsed="0.004299"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.719442" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:52.719064" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.719774" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.719540" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.720477" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:52.720075" elapsed="0.000428"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.719875" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.719522" elapsed="0.001039"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.721113" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:52.720723" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:52.721444" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:52.721214" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:52.722103" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:52.721681" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:52.721525" elapsed="0.000640"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:52.721195" elapsed="0.000991"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:52.722333" elapsed="0.000459"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:45:52.723331" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:52.722975" elapsed="0.000383"/>
</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-08-15T23:45:52.723510" elapsed="0.005687"/>
</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-08-15T23:45:52.706884" elapsed="0.022375"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:45:52.729304" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:45:52.731629" 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-08-15T23:45:52.687714" elapsed="0.043942"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:45:52.731711" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:45:52.587682" elapsed="0.144176"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:45:52.565824" elapsed="0.166125"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:45:52.565355" elapsed="0.166651"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:45:19.684940" elapsed="33.047150">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:45:19.684491" elapsed="33.047700">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:45:19.684124" elapsed="33.048130">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:45:19.683512" elapsed="33.048837">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.737028" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:53.736231" elapsed="0.000844"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:45:53.737153" elapsed="0.000052"/>
</return>
<msg time="2026-08-15T23:45:53.737379" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:45:53.735416" elapsed="0.001999"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:53.761832" elapsed="0.000875"/>
</kw>
<msg time="2026-08-15T23:45:53.762872" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:53.761354" elapsed="0.001578"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:53.760963" elapsed="0.002046"/>
</kw>
<msg time="2026-08-15T23:45:53.763051" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:53.752124" elapsed="0.010972"/>
</kw>
<msg time="2026-08-15T23:45:53.763197" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:53.751777" elapsed="0.011445"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.764137" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.763391" elapsed="0.000774"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.764598" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:53.764260" elapsed="0.000405"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.798360" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:53.797976" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:53.799238" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:53.798975" elapsed="0.000345">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:53.799414" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:53.798605" elapsed="0.000834"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.800071" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:53.799655" elapsed="0.000444"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:53.800604" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:53.800768" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:53.800378" elapsed="0.000415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.801303" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:53.801048" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.802387" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:53.802127" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.802874" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.802588" elapsed="0.000313"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.803560" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.803262" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.804340" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.804114" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.804416" elapsed="0.000047"/>
</return>
<msg time="2026-08-15T23:45:53.804586" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.803772" elapsed="0.000839"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.804761" elapsed="0.000268"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:45:53.803129" elapsed="0.001940"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.805609" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.805313" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.806362" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.806155" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.806441" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:53.806590" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.805830" elapsed="0.000784"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.806760" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:53.805183" elapsed="0.001856"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.807583" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.807284" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.808341" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.808127" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.808416" elapsed="0.000057"/>
</return>
<msg time="2026-08-15T23:45:53.808605" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.807787" elapsed="0.000842"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.808774" elapsed="0.000400"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:45:53.807151" elapsed="0.002063"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.809751" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.809456" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.810489" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.810283" elapsed="0.000231"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.810562" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:53.810710" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.809971" elapsed="0.000762"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.810933" elapsed="0.000222"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:45:53.809327" elapsed="0.001868"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.811730" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.811435" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.812488" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.812266" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.812566" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:53.812715" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.811951" elapsed="0.000788"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.812901" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:45:53.811306" elapsed="0.001861"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.813700" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.813406" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.814441" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.814234" elapsed="0.000232"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.814515" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:53.814663" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.813919" elapsed="0.000768"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.814848" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:45:53.813278" elapsed="0.001829"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.815641" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.815347" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.816387" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.816181" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.816514" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:45:53.816670" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.815861" elapsed="0.000833"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.816865" elapsed="0.000227"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:45:53.815218" elapsed="0.001915"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.817678" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:53.817372" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:53.818446" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.818230" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:53.818521" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:53.818678" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:53.817902" elapsed="0.000800"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:53.818865" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:53.817244" elapsed="0.001881"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:53.802950" elapsed="0.016210"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:53.819202" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:45:53.819359" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:53.801774" elapsed="0.017612"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:53.801466" elapsed="0.017952"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.819594" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:53.819443" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:53.801445" elapsed="0.018267"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.820838" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:53.819934" elapsed="0.000934"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:53.820967" elapsed="0.000058"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:53.796980" elapsed="0.024270"/>
</kw>
<msg time="2026-08-15T23:45:53.821340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:53.783187" elapsed="0.038250"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.843736" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.866090" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.888281" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.888539" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.888732" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.889310" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:53.889047" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:53.889032" elapsed="0.000447"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.889677" elapsed="0.000044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.890030" elapsed="0.000045"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.890354" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:53.889002" elapsed="0.001517"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:53.888871" elapsed="0.001708"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.890726" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:53.890901" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:45:53.891023" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:53.778690" elapsed="0.112359"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.919678" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:53.919242" elapsed="0.000467"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:53.920642" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:53.920360" elapsed="0.000368">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:53.920862" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:53.919980" elapsed="0.000914"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.921687" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:53.921206" elapsed="0.000512"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:53.922170" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:53.922322" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:53.922015" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.922897" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:53.922598" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:45:53.923434" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:53.923084" elapsed="0.000420"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.924136" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:53.923704" elapsed="0.000477"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:53.923533" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:53.923060" elapsed="0.001200"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:53.925391" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:53.924494" elapsed="0.000929"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:53.925524" elapsed="0.000054"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:53.917961" elapsed="0.007874"/>
</kw>
<msg time="2026-08-15T23:45:53.925932" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:53.904195" elapsed="0.021838"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.948612" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.971241" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.993886" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.994143" 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-08-15T23:45:53.994346" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.994954" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:53.994663" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:53.994647" elapsed="0.000493"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.995348" elapsed="0.000047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.995684" elapsed="0.000046"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.996048" elapsed="0.000053"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:53.994614" elapsed="0.001614"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:53.994475" elapsed="0.001817"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:53.996444" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:53.996619" elapsed="0.000020"/>
</return>
<msg time="2026-08-15T23:45:53.996758" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:53.901367" elapsed="0.095422"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:53.999514" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:53.998958" elapsed="0.000682">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:53.999774" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:53.997576" elapsed="0.002279"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.000343" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:53.999972" elapsed="0.000528"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.001829" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:54.001159" elapsed="0.000714"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.000529" elapsed="0.001426"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:53.999952" elapsed="0.002027"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.004915" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:54.002131" elapsed="0.002811"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:54.005083" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:54.005255" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:53.997215" elapsed="0.008067"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.007227" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.006720" elapsed="0.000582"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.007981" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.007471" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.008745" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.008218" elapsed="0.000608"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.009487" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.008995" elapsed="0.000555"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:45:54.011151" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:45:54.010495" elapsed="0.000758"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:45:54.012141" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:45:54.011532" elapsed="0.000710"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:54.012519" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.014138" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.013379" elapsed="0.000954"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:45:54.014431" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:45:54.014709" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:45:54.009771" elapsed="0.004965"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:54.043225" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:45:54.043385" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:54.043636" 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-08-15T23:45:54.029492" elapsed="0.014204"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.014908" elapsed="0.029004"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.044353" elapsed="0.000129"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.044001" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.014889" elapsed="0.029868"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.054381" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.049562" elapsed="0.004890"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.048221" elapsed="0.006281"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.048113" elapsed="0.006458"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.057729" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.055204" elapsed="0.002640"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.054668" elapsed="0.003227"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.054629" elapsed="0.003335"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.059655" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:54.058537" elapsed="0.001233"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.060550" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.060032" elapsed="0.000637"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.061669" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:54.061143" elapsed="0.000566"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.060739" elapsed="0.001020"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.059996" elapsed="0.001907"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.063572" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:54.062451" elapsed="0.001223"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.064340" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.063831" elapsed="0.000619"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.065442" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:54.064973" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.064539" elapsed="0.001015"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.063773" elapsed="0.001849"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:54.066032" elapsed="0.000891"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:45:54.067911" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:54.067200" elapsed="0.000811"/>
</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-08-15T23:45:54.068278" elapsed="0.002880"/>
</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-08-15T23:45:54.046101" elapsed="0.025170"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:45:54.071514" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-08-15T23:45:54.071359" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.071338" elapsed="0.000342"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.071861" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.072002" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:45:54.074499" 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-08-15T23:45:54.005695" elapsed="0.068833"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:45:54.074597" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:54.074768" 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-08-15T23:45:53.767622" elapsed="0.307172"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.075159" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.074912" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.074893" elapsed="0.000360"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:45:54.075286" elapsed="0.000028"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:45:53.764945" elapsed="0.310469"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:53.764692" elapsed="0.310768"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:53.764239" elapsed="0.311244"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:54.075640" elapsed="0.000295"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:45:53.738381" elapsed="0.337627"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:45:53.737589" elapsed="0.338542"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.076864" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:54.076307" elapsed="0.000588"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:54.099581" elapsed="0.000845"/>
</kw>
<msg time="2026-08-15T23:45:54.100481" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:54.099213" elapsed="0.001327"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:54.098816" elapsed="0.001832"/>
</kw>
<msg time="2026-08-15T23:45:54.100706" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:54.088867" elapsed="0.011898"/>
</kw>
<msg time="2026-08-15T23:45:54.100918" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:54.088454" elapsed="0.012495"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.154904" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:54.154262" elapsed="0.000699"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:54.156087" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.155767" elapsed="0.000411">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:54.156374" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:54.155315" elapsed="0.001103"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.157422" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:54.156821" elapsed="0.000649"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:54.158079" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:54.158353" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:54.157822" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.159150" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.158737" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.160787" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.160303" elapsed="0.000548"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.161298" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:54.161019" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.162025" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:54.161707" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:54.162783" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:54.162558" elapsed="0.000278"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:54.162953" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:45:54.163126" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:54.162240" 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-08-15T23:45:54.163308" elapsed="0.000251"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:54.161570" elapsed="0.002029"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.164270" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:54.163969" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:54.165047" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:54.164833" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:54.165123" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:54.165273" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:54.164477" 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-08-15T23:45:54.165445" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:54.163717" elapsed="0.001988"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:54.161384" elapsed="0.004356"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:54.165785" elapsed="0.000044"/>
</return>
<msg time="2026-08-15T23:45:54.165959" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:54.159928" elapsed="0.006057"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.159411" elapsed="0.006632"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.166313" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.166103" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.159363" elapsed="0.007082"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.167662" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:54.166745" elapsed="0.000965"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:54.167875" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:54.152677" elapsed="0.015430"/>
</kw>
<msg time="2026-08-15T23:45:54.168272" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:54.138181" elapsed="0.030146"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.181396" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.194569" elapsed="0.000043"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.207331" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.207597" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.207777" elapsed="0.000039"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.208318" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.208094" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:54.208076" elapsed="0.000467"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.208751" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.209110" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.209488" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:54.208038" elapsed="0.001657"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.207883" elapsed="0.001845"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.209896" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.209976" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:54.210123" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:54.133689" elapsed="0.076462"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:54.212008" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.211566" elapsed="0.000655">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:54.212407" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:54.211014" elapsed="0.001419"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.212790" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.212506" elapsed="0.000456"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.213937" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:54.213179" elapsed="0.000799"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:54.212990" elapsed="0.001100"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.212486" elapsed="0.001630"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.220985" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:54.214272" elapsed="0.006749"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:54.221077" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:45:54.221242" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:54.210587" elapsed="0.010681"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:54.223217" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.222810" elapsed="0.000623">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:54.223680" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:54.222266" elapsed="0.001446"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:54.223986" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-08-15T23:45:54.223821" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:54.223780" elapsed="0.000361"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.224350" elapsed="0.000034"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.224578" elapsed="0.000028"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.224682" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:45:54.226884" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:54.221665" elapsed="0.005246"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.228580" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.228120" elapsed="0.000510"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:54.229319" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:54.228853" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:54.246890" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:54.247251" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:54.247542" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.231755" elapsed="0.016410">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:54.229433" elapsed="0.019009">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.248763" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.248496" elapsed="0.000541"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:54.229414" elapsed="0.019663">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.249850" elapsed="0.000044"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.250078" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:54.250014" elapsed="0.000128"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:54.249980" elapsed="0.000193"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.250385" elapsed="0.000037"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.250519" elapsed="0.000027"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.227281" elapsed="0.023406">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.250794" elapsed="0.000051"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.107451" elapsed="0.143513">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:54.251349" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:54.251095" elapsed="0.000412"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:54.251070" elapsed="0.000472"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:54.251589" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.101993" elapsed="0.149739">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.310663" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:57.310014" elapsed="0.000711"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:57.311850" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.311547" elapsed="0.000383">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:57.312142" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:57.311099" elapsed="0.001089"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.313165" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:57.312526" elapsed="0.000687"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:45:57.313930" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:45:57.314196" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:45:57.313553" elapsed="0.000701"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.314968" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:57.314588" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.316253" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:57.315994" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.316735" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:45:57.316459" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.317463" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:57.317165" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:57.318309" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:57.318056" elapsed="0.000280"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:57.318396" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:45:57.318555" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:57.317673" 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-08-15T23:45:57.318731" elapsed="0.000259"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:45:57.317027" elapsed="0.002003"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.319579" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:45:57.319274" elapsed="0.000331"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:45:57.320487" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:45:57.320277" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:45:57.320564" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:45:57.320774" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:45:57.319784" elapsed="0.001043"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:45:57.320979" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:45:57.319145" elapsed="0.002098"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:45:57.316846" elapsed="0.004432"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:45:57.321320" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:45:57.321476" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:45:57.315620" elapsed="0.005882"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:57.315221" elapsed="0.006341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.321853" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:57.321622" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:57.315176" elapsed="0.006812"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.323110" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:45:57.322302" elapsed="0.000855"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:45:57.323290" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:45:57.308389" elapsed="0.015137"/>
</kw>
<msg time="2026-08-15T23:45:57.323697" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:45:57.293374" elapsed="0.030378"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.336508" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.349147" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.361671" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.361882" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.362056" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.362536" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:57.362321" elapsed="0.000356"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:57.362306" elapsed="0.000448"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.362955" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.363300" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.363652" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:45:57.362276" elapsed="0.001588"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.362131" elapsed="0.001764"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.364040" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.364117" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:45:57.364237" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:45:57.289088" elapsed="0.075175"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:57.365896" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.365478" elapsed="0.000608">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:57.366288" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:57.364974" elapsed="0.001341"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.366632" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:57.366387" elapsed="0.000383"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.367496" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:45:57.367004" elapsed="0.000533"/>
</kw>
<status status="PASS" start="2026-08-15T23:45:57.366820" elapsed="0.000826"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:57.366368" elapsed="0.001302"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.374445" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:45:57.367893" elapsed="0.006580"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:45:57.374526" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:45:57.374683" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:57.364619" elapsed="0.010088"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:45:57.376269" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.375895" elapsed="0.000561">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:45:57.376634" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:45:57.375392" elapsed="0.001267"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:45:57.376892" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:45:57.376730" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:45:57.376712" elapsed="0.000263"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.377123" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.377289" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.377354" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:45:57.379399" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:45:57.375066" elapsed="0.004360"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.381152" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:57.380672" elapsed="0.000527"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:45:57.381817" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:45:57.381349" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:45:57.483944" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:45:57.484563" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:45:57.485061" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.384179" elapsed="0.102064">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:45:57.381933" elapsed="0.105154">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.487524" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:57.487169" elapsed="0.000688"/>
</branch>
<status status="FAIL" start="2026-08-15T23:45:57.381915" elapsed="0.105995">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.488779" elapsed="0.000088"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.489048" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:45:57.488985" elapsed="0.000127"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:57.488955" elapsed="0.000187"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.489359" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.489464" elapsed="0.000026"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.379783" elapsed="0.109851">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.489740" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.263301" elapsed="0.226614">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:45:57.490306" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:45:57.490052" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:45:57.490028" elapsed="0.000436"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:45:57.490508" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:45:57.252758" elapsed="0.237892">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.547646" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:00.546979" elapsed="0.000723"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:00.548884" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.548573" elapsed="0.000393">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:00.549167" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:00.548108" elapsed="0.001104"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.550200" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:00.549565" elapsed="0.000685"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:00.550988" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:00.551255" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:00.550602" elapsed="0.000701"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.552055" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:00.551652" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.553428" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:00.553153" elapsed="0.000338"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.553959" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:00.553663" elapsed="0.000323"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.554672" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:00.554360" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:00.555507" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:00.555278" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:00.555591" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:46:00.555756" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:00.554952" elapsed="0.000830"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:00.555989" elapsed="0.000252"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:00.554224" elapsed="0.002058"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.556891" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:00.556560" elapsed="0.000359"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:00.557849" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:00.557592" elapsed="0.000285"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:00.557929" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:00.558087" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:00.557115" elapsed="0.000999"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:00.558270" elapsed="0.000237"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:00.556400" elapsed="0.002160"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:00.554039" elapsed="0.004568"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:00.558654" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:00.558835" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:00.552730" elapsed="0.006144"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:00.552311" elapsed="0.006634"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.559219" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:00.559005" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:00.552265" elapsed="0.007127"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.560601" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:00.559720" elapsed="0.000941"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:00.560795" elapsed="0.000099"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:00.545345" elapsed="0.015740"/>
</kw>
<msg time="2026-08-15T23:46:00.561257" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:00.530712" elapsed="0.030601"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.574223" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.587182" elapsed="0.000040"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.600185" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.600397" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.600573" elapsed="0.000026"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.601101" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:00.600877" elapsed="0.000368"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:00.600859" elapsed="0.000465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.601501" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.601848" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.602202" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:00.600822" elapsed="0.001578"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.600661" elapsed="0.001769"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.602578" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.602663" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:46:00.602824" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:00.526145" elapsed="0.076754"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:00.604645" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.604222" elapsed="0.000684">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:00.605094" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:00.603618" elapsed="0.001503"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.605461" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:00.605195" elapsed="0.000407"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.606383" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:00.605869" elapsed="0.000556"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:00.605631" elapsed="0.000907"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:00.605176" elapsed="0.001388"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.613455" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:00.606726" elapsed="0.006757"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:00.613537" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:00.613694" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:00.603267" elapsed="0.010453"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:00.615350" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.614928" elapsed="0.000608">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:00.615717" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:00.614390" elapsed="0.001352"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:00.615991" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:00.615828" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:00.615795" elapsed="0.000280"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.616219" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.616385" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.616450" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:00.618449" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:00.614059" elapsed="0.004417"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.620197" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:00.619663" elapsed="0.000582"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:00.620875" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:00.620396" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:00.716444" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:00.716704" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:00.716959" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.623311" elapsed="0.094083">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:00.620992" elapsed="0.096599">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.717812" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:00.717628" elapsed="0.000363"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:00.620973" elapsed="0.097046">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.718497" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.718636" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:00.718597" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:00.718580" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.719030" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.719102" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.618855" elapsed="0.100363">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.719295" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.500985" elapsed="0.218410">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:00.719667" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:00.719486" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:00.719470" elapsed="0.000293"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:00.719850" elapsed="0.000018"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:00.491687" elapsed="0.228271">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.776921" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:03.776285" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:03.778095" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.777781" elapsed="0.000391">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:03.778370" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:03.777328" elapsed="0.001086"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.779366" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:03.778751" elapsed="0.000666"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:03.780122" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:03.780379" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:03.779864" elapsed="0.000561"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.781141" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:03.780755" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.782522" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:03.782263" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.783026" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:03.782723" elapsed="0.000330"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.783731" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:03.783419" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:03.784521" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:03.784298" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:03.784599" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:46:03.784760" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:03.783968" elapsed="0.000817"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:03.784964" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:03.783286" elapsed="0.001966"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.785787" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:03.785495" elapsed="0.000438"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:03.786785" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:03.786575" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:03.786876" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:03.787026" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:03.786260" elapsed="0.000791"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:03.787197" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:03.785367" elapsed="0.002088"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:03.783108" elapsed="0.004382"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:03.787535" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:46:03.787724" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:03.781896" elapsed="0.005855"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:03.781397" elapsed="0.006439"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.788109" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:03.787899" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:03.781352" elapsed="0.006895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.789367" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:03.788543" elapsed="0.000871"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:03.789542" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:03.774708" elapsed="0.015064"/>
</kw>
<msg time="2026-08-15T23:46:03.789974" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:03.760462" elapsed="0.029569"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.802721" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.815309" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.827877" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.828076" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.828251" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.828732" elapsed="0.000090"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:03.828515" elapsed="0.000395"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:03.828499" elapsed="0.000489"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.829165" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.829477" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.829845" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:03.828465" elapsed="0.001580"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.828327" elapsed="0.001749"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.830221" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.830297" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:03.830426" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:03.755656" elapsed="0.074798"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:03.832199" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.831757" elapsed="0.000642">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:03.832579" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:03.831172" elapsed="0.001432"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.833016" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:03.832680" elapsed="0.000480"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.833906" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:03.833366" elapsed="0.000582"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:03.833189" elapsed="0.000867"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:03.832661" elapsed="0.001419"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.840794" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:03.834231" elapsed="0.006605"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:03.840890" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:46:03.841047" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:03.830837" elapsed="0.010235"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:03.842615" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.842242" elapsed="0.000803">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:03.843228" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:03.841718" elapsed="0.001535"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:03.843462" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:46:03.843325" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:03.843306" elapsed="0.000238"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.843687" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.843870" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.843938" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:03.845881" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:03.841396" elapsed="0.004513"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.847758" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:03.847293" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:03.848427" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:03.847978" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:03.945610" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:03.946214" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:03.946639" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.850949" elapsed="0.096664">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:03.848541" elapsed="0.099552">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.948563" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:03.948180" elapsed="0.000838"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:03.848523" elapsed="0.100560">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.950282" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.950599" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:03.950511" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:03.950471" elapsed="0.000273"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.951143" elapsed="0.000054"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.951309" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.846269" elapsed="0.105285">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.951726" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.730255" elapsed="0.221753">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:03.952669" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:03.952217" elapsed="0.000761"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:03.952178" elapsed="0.000858"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:03.953111" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:03.721043" elapsed="0.232244">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.010296" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:07.009662" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:07.011429" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:07.011169" elapsed="0.000336">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:07.011702" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:07.010700" elapsed="0.001048"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.012715" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:07.012112" elapsed="0.000650"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:07.013502" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:07.013762" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:07.013252" elapsed="0.000576"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.014517" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:07.014159" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.015827" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:07.015551" elapsed="0.000324"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.016360" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:07.016083" elapsed="0.000304"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.017142" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:07.016747" elapsed="0.000422"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:07.017913" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:07.017670" elapsed="0.000269"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:07.017992" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:46:07.018153" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:07.017355" elapsed="0.000823"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:07.018328" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:07.016615" elapsed="0.001994"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.019176" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:07.018877" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:07.020063" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:07.019850" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:07.020140" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:07.020291" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:07.019383" elapsed="0.000933"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:07.020463" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:07.018726" elapsed="0.001997"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:07.016440" elapsed="0.004318"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:07.020816" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:07.020975" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:07.015225" elapsed="0.005776"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:07.014769" elapsed="0.006311"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.021349" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:07.021141" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:07.014725" elapsed="0.006757"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.022585" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:07.021779" elapsed="0.000854"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:07.022767" elapsed="0.000099"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:07.008084" elapsed="0.014943"/>
</kw>
<msg time="2026-08-15T23:46:07.023197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:06.993789" elapsed="0.029463"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.036001" elapsed="0.000033"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.048759" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.061458" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.061658" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.061852" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.062338" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:07.062124" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:07.062107" elapsed="0.000451"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.062732" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.063062" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.063411" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:07.062072" elapsed="0.001533"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.061933" elapsed="0.001702"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.063780" elapsed="0.000041"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.063880" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:46:07.064010" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:06.989516" elapsed="0.074521"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:07.065682" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:07.065285" elapsed="0.000615">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:07.066082" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:07.064740" elapsed="0.001368"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.066442" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:07.066181" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.067360" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:07.066785" elapsed="0.000616"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:07.066609" elapsed="0.000903"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:07.066162" elapsed="0.001375"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.074119" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:07.067687" elapsed="0.006459"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:07.074199" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:07.074354" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:07.064392" elapsed="0.009987"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:07.075984" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:07.075567" elapsed="0.000600">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:07.076352" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:07.075080" elapsed="0.001319"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:07.076612" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:07.076475" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:07.076456" elapsed="0.000240"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.076922" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.077094" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.077159" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:07.079315" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:07.074740" elapsed="0.004603"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.081048" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:07.080559" elapsed="0.000537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:07.081701" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:07.081247" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:07.176703" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:07.177275" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:07.177709" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:07.084056" elapsed="0.094604">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:07.081837" elapsed="0.097349">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.179645" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:07.179277" elapsed="0.000799"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:07.081817" elapsed="0.098325">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.180906" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.181104" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:07.181049" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:07.181025" elapsed="0.000170"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.181400" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.181497" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:07.079702" elapsed="0.101948">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.181848" elapsed="0.000025"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:06.966853" elapsed="0.215140">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:07.182373" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:07.182122" elapsed="0.000352"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:07.182098" elapsed="0.000411"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:07.182554" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:06.954374" elapsed="0.228324">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.238166" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:10.237531" elapsed="0.000698"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:10.239320" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.239041" elapsed="0.000354">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:10.239593" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:10.238575" elapsed="0.001063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.240605" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:10.240002" elapsed="0.000651"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:10.241402" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:10.241659" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:10.241147" elapsed="0.000557"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.242408" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:10.242052" elapsed="0.000453"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.243703" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:10.243445" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.244192" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:10.243923" elapsed="0.000295"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.244973" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:10.244578" elapsed="0.000422"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:10.245736" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:10.245515" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:10.245835" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:46:10.245999" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:10.245194" elapsed="0.000831"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:10.246230" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:10.244445" elapsed="0.002066"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.247074" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:10.246756" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:10.247817" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:10.247594" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:10.247894" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:10.248044" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:10.247283" elapsed="0.000786"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:10.248215" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:10.246626" elapsed="0.001847"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:10.244270" elapsed="0.004238"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:10.248552" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:46:10.248707" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:10.243118" elapsed="0.005615"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:10.242659" elapsed="0.006133"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.249112" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:10.248878" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:10.242614" elapsed="0.006637"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.250527" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:10.249554" elapsed="0.001022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:10.250710" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:10.235950" elapsed="0.015015"/>
</kw>
<msg time="2026-08-15T23:46:10.251133" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:10.221423" elapsed="0.029763"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.264041" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.276778" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.289507" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.289736" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.289935" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.290406" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:10.290193" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:10.290178" elapsed="0.000448"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.290827" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.291143" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.291493" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:10.290147" elapsed="0.001540"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.290011" elapsed="0.001706"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.291879" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.291957" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:10.292076" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:10.216924" elapsed="0.075179"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:10.293726" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.293333" elapsed="0.000618">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:10.294130" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:10.292819" elapsed="0.001337"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.294470" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:10.294227" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.295326" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:10.294836" elapsed="0.000531"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:10.294639" elapsed="0.000835"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:10.294208" elapsed="0.001290"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.302134" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:10.295647" elapsed="0.006516"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:10.302215" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:10.302371" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:10.292460" elapsed="0.009936"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:10.303949" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.303562" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:10.304311" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:10.303074" elapsed="0.001265"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:10.304574" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:10.304412" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:10.304393" elapsed="0.000265"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.304865" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.305035" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.305101" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:10.307281" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:10.302718" elapsed="0.004590"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.309036" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:10.308554" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:10.309680" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:10.309234" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:10.399397" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:10.400003" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:10.400409" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.312057" elapsed="0.089289">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:10.309836" elapsed="0.091943">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.402276" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:10.401916" elapsed="0.000741"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:10.309793" elapsed="0.092928">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.403957" elapsed="0.000066"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.404271" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:10.404185" elapsed="0.000180"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:10.404146" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.404733" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.404954" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.307661" elapsed="0.097539">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.405368" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.194157" elapsed="0.211429">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:10.406231" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:10.405786" elapsed="0.000683"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:10.405748" elapsed="0.000780"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:10.406601" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:10.183692" elapsed="0.223177">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.463991" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:13.463245" elapsed="0.000803"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:13.465260" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.464931" elapsed="0.000415">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:13.465556" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:13.464418" elapsed="0.001186"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.466696" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:13.466070" elapsed="0.000676"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:13.467365" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:13.467646" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:13.467107" elapsed="0.000586"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.468445" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:13.468065" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.469774" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:13.469505" elapsed="0.000339"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.470283" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:13.470005" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.471076" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:13.470687" elapsed="0.000417"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:13.471930" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:13.471642" elapsed="0.000315"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:13.472010" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:46:13.472177" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:13.471292" 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-08-15T23:46:13.472355" elapsed="0.000287"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:13.470549" elapsed="0.002140"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.473275" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:13.472966" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:13.474051" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:13.473833" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:13.474130" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:13.474285" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:13.473495" elapsed="0.000816"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:13.474460" elapsed="0.000293"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:13.472832" elapsed="0.001982"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:13.470363" elapsed="0.004491"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:13.474901" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:13.475064" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:13.469159" elapsed="0.005933"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:13.468725" elapsed="0.006427"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.475453" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:13.475213" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:13.468678" elapsed="0.006946"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.476983" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:13.475948" elapsed="0.001085"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:13.477168" elapsed="0.000078"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:13.461622" elapsed="0.015790"/>
</kw>
<msg time="2026-08-15T23:46:13.477591" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:13.447152" elapsed="0.030498"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.490576" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.504722" elapsed="0.000066"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.518139" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.518368" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.518549" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.519094" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:13.518869" elapsed="0.000372"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:13.518850" elapsed="0.000472"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.519507" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.519846" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.520198" elapsed="0.000093"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:13.518789" elapsed="0.001724"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.518636" elapsed="0.001911"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.520700" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.520782" elapsed="0.000040"/>
</return>
<msg time="2026-08-15T23:46:13.520960" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:13.442814" elapsed="0.078174"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:13.522711" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.522285" elapsed="0.000648">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:13.523115" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:13.521710" elapsed="0.001431"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.523476" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:13.523213" elapsed="0.000401"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.524391" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:13.523882" elapsed="0.000550"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:13.523641" elapsed="0.000900"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:13.523194" elapsed="0.001371"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.531177" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:13.524715" elapsed="0.006490"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:13.531257" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:46:13.531414" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:13.521358" elapsed="0.010081"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:13.533015" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.532626" elapsed="0.000571">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:13.533377" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:13.532115" elapsed="0.001287"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:13.533609" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:46:13.533473" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:13.533454" elapsed="0.000238"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.533857" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.534027" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.534093" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:13.536283" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:13.531762" elapsed="0.004702"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.538159" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:13.537678" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:13.538832" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:13.538357" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:13.629992" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:13.630543" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:13.630980" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.541248" elapsed="0.090741">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:13.538984" elapsed="0.093445">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.632728" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:13.632485" elapsed="0.000531"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:13.538964" elapsed="0.094093">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.633794" elapsed="0.000073"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.634029" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:13.633973" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:13.633948" elapsed="0.000171"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.634345" elapsed="0.000037"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.634455" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.536862" elapsed="0.097751">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.634722" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.416926" elapsed="0.217987">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:13.635337" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:13.635047" elapsed="0.000445"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:13.635022" elapsed="0.000511"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:13.635584" elapsed="0.000023"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:13.407978" elapsed="0.227756">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.694151" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:16.693493" elapsed="0.000713"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:16.695401" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.695122" elapsed="0.000359">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:16.695686" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:16.694626" elapsed="0.001115"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.696747" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:16.696130" elapsed="0.000788"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:16.697512" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:16.697776" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:16.697259" elapsed="0.000578"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.698545" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:16.698186" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.699872" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:16.699597" elapsed="0.000321"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.700357" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:16.700089" elapsed="0.000294"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.701089" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:16.700750" elapsed="0.000366"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:16.701932" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:16.701617" elapsed="0.000342"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:16.702012" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:46:16.702175" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:16.701302" 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-08-15T23:46:16.702350" elapsed="0.000239"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:16.700618" elapsed="0.002011"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.703190" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:16.702894" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:16.703928" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:16.703705" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:16.704003" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:16.704179" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:16.703394" elapsed="0.000810"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:16.704351" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:16.702749" elapsed="0.001866"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:16.700437" elapsed="0.004213"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:16.704694" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:46:16.704871" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:16.699268" elapsed="0.005629"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:16.698850" elapsed="0.006105"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.705226" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:16.705015" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:16.698750" elapsed="0.006608"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.706623" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:16.705652" elapsed="0.001053"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:16.706857" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:16.691848" elapsed="0.015243"/>
</kw>
<msg time="2026-08-15T23:46:16.707257" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:16.677481" elapsed="0.029830"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.720189" elapsed="0.000034"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.733066" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.745972" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.746170" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.746343" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.746844" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:16.746601" elapsed="0.000389"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:16.746586" elapsed="0.000481"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.747245" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.747556" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.747956" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:16.746555" elapsed="0.001602"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.746420" elapsed="0.001767"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.748334" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.748411" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:16.748536" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:16.673015" elapsed="0.075548"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:16.750235" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.749854" elapsed="0.000572">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:16.750609" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:16.749318" elapsed="0.001317"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.751035" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:16.750708" elapsed="0.000465"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.751964" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:16.751383" elapsed="0.000627"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:16.751202" elapsed="0.000953"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:16.750689" elapsed="0.001507"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.758773" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:16.752365" elapsed="0.006506"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:16.758929" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:16.759088" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:16.748993" elapsed="0.010120"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:16.760727" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.760298" elapsed="0.000731">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:16.761212" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:16.759763" elapsed="0.001475"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:16.761452" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:16.761312" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:16.761293" elapsed="0.000249"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.761691" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.761879" elapsed="0.000024"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.761962" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:16.764193" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:16.759440" elapsed="0.004782"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.765901" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:16.765417" elapsed="0.000531"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:16.766543" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:16.766098" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:16.859432" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:16.860136" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:16.860564" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.768896" elapsed="0.092613">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:16.766655" elapsed="0.095443">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.862578" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:16.862187" elapsed="0.000814"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:16.766636" elapsed="0.096430">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.864234" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.864577" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:16.864473" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:16.864427" elapsed="0.000303"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.865204" elapsed="0.000054"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.865374" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.764585" elapsed="0.101040">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.865873" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.646341" elapsed="0.219765">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:16.866734" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:16.866311" elapsed="0.000632"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:16.866274" elapsed="0.000725"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:16.867071" elapsed="0.000041"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:16.636795" elapsed="0.230527">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.926069" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:19.925402" elapsed="0.000721"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:19.927270" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:19.926968" elapsed="0.000382">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:19.927554" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:19.926483" elapsed="0.001115"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.928685" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:19.928012" elapsed="0.000722"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:19.929407" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:19.929734" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:19.929157" elapsed="0.000622"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.930495" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:19.930138" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.931839" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:19.931558" elapsed="0.000328"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.932333" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:19.932042" elapsed="0.000317"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.933083" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:19.932739" elapsed="0.000371"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:19.933871" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:19.933621" elapsed="0.000276"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:19.933950" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:46:19.934117" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:19.933298" elapsed="0.000844"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:19.934292" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:19.932605" elapsed="0.001969"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.935201" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:19.934901" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:19.935949" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:19.935722" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:19.936025" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:19.936174" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:19.935410" elapsed="0.000789"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:19.936346" elapsed="0.000256"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:19.934692" elapsed="0.001952"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:19.932414" elapsed="0.004266"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:19.936723" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:19.936901" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:19.931225" elapsed="0.005703"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:19.930751" elapsed="0.006237"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.937259" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:19.937048" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:19.930704" elapsed="0.006688"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.938503" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:19.937690" elapsed="0.000862"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:19.938684" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:19.923560" elapsed="0.015376"/>
</kw>
<msg time="2026-08-15T23:46:19.939107" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:19.908926" elapsed="0.030239"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.952315" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.965144" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.977766" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.977988" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.978165" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.978651" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:19.978435" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:19.978419" elapsed="0.000477"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.979076" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.979388" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.979734" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:19.978384" elapsed="0.001566"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:19.978245" elapsed="0.001737"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.980130" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:19.980207" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:19.980340" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:19.904602" elapsed="0.075765"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:19.982088" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:19.981648" elapsed="0.000637">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:19.982465" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:19.981111" elapsed="0.001380"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.982833" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:19.982561" elapsed="0.000449"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.983716" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:19.983218" elapsed="0.000538"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:19.983040" elapsed="0.000896"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:19.982543" elapsed="0.001419"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.990549" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:19.984112" elapsed="0.006465"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:19.990629" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:19.990786" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:19.980743" elapsed="0.010085"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:19.992429" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:19.992031" elapsed="0.000584">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:19.992814" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:19.991478" elapsed="0.001363"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:19.993051" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:46:19.992914" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:19.992895" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.993279" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:19.993445" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:19.993514" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:19.995659" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:19.991158" elapsed="0.004529"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.997419" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:19.996957" elapsed="0.000651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:19.998239" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:19.997765" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:20.091792" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:20.092446" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:20.092964" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:20.000604" elapsed="0.093335">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:19.998354" elapsed="0.096030">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:20.094927" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:20.094474" elapsed="0.000846"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:19.998336" elapsed="0.097048">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:20.096655" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:20.097159" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:20.097065" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:20.097023" elapsed="0.000281"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:20.097627" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:20.097785" elapsed="0.000073"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:19.996088" elapsed="0.101993">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:20.098253" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:19.878530" elapsed="0.219944">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:20.099122" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:20.098672" elapsed="0.000612"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:20.098635" elapsed="0.000703"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:20.099409" elapsed="0.000032"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:19.868429" elapsed="0.231201">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.155070" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:23.154441" elapsed="0.000684"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:23.156233" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.155943" elapsed="0.000367">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:23.156509" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:23.155472" elapsed="0.001081"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.157500" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:23.156910" elapsed="0.000638"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:23.158161" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:23.158421" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:23.157906" elapsed="0.000561"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.159314" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:23.158953" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.160657" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:23.160396" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.161252" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:23.160980" elapsed="0.000299"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.161965" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:23.161649" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:23.162713" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:23.162492" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:23.162790" elapsed="0.000061"/>
</return>
<msg time="2026-08-15T23:46:23.162979" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:23.162176" elapsed="0.000828"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:23.163154" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:23.161511" elapsed="0.001925"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.164024" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:23.163682" elapsed="0.000368"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:23.165003" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:23.164768" elapsed="0.000263"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:23.165081" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:23.165232" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:23.164282" elapsed="0.000975"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:23.165404" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:23.163554" elapsed="0.002114"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:23.161334" elapsed="0.004370"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:23.165749" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:46:23.165922" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:23.159982" elapsed="0.005967"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:23.159563" elapsed="0.006443"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.166272" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:23.166067" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:23.159517" elapsed="0.006887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.167670" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:23.166699" elapsed="0.001019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:23.167867" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:23.152884" elapsed="0.015216"/>
</kw>
<msg time="2026-08-15T23:46:23.168283" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:23.138522" elapsed="0.029815"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.181171" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.193825" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.206478" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.206670" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.206859" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.207329" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:23.207116" elapsed="0.000354"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:23.207100" elapsed="0.000447"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.207722" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.208061" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.208418" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:23.207070" elapsed="0.001548"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.206936" elapsed="0.001711"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.208792" elapsed="0.000041"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.208890" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:23.209009" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:23.134005" elapsed="0.075030"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:23.210599" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.210227" elapsed="0.000560">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:23.211005" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:23.209710" elapsed="0.001320"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.211360" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:23.211118" elapsed="0.000380"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.212246" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:23.211699" elapsed="0.000589"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:23.211526" elapsed="0.000873"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:23.211099" elapsed="0.001324"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.219127" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:23.212573" elapsed="0.006582"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:23.219207" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:23.219362" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:23.209388" elapsed="0.009999"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:23.220960" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.220567" elapsed="0.000578">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:23.221392" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:23.220067" elapsed="0.001351"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:23.221629" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:23.221491" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:23.221472" elapsed="0.000240"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.221878" elapsed="0.000024"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.222049" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.222114" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:23.224336" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:23.219710" elapsed="0.004654"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.226137" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:23.225617" elapsed="0.000595"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:23.227053" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:23.226535" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:23.325698" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:23.326278" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:23.326689" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.229564" elapsed="0.098188">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:23.227172" elapsed="0.101107">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.328750" elapsed="0.000093"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:23.328369" elapsed="0.000823"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:23.227152" elapsed="0.102108">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.330448" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.330763" elapsed="0.000085"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:23.330676" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:23.330635" elapsed="0.000329"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.331286" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.331444" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.224771" elapsed="0.106917">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.331902" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.108640" elapsed="0.223627">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:23.332772" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:23.332478" elapsed="0.000429"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:23.332439" elapsed="0.000501"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:23.332987" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:23.100738" elapsed="0.232390">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.391869" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:26.391223" elapsed="0.000702"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:26.393016" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.392720" elapsed="0.000377">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:26.393293" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:26.392271" elapsed="0.001067"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.394310" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:26.393673" elapsed="0.000685"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:26.395084" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:26.395344" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:26.394702" elapsed="0.000688"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.396090" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.395715" elapsed="0.000470"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.397391" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.397132" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.397891" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.397591" elapsed="0.000327"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.398754" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:26.398319" elapsed="0.000461"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:26.399533" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.399310" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:26.399612" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:46:26.399788" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:26.398992" elapsed="0.000894"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.400047" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:26.398186" elapsed="0.002145"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.400967" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:26.400582" elapsed="0.000411"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:26.401700" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.401490" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:26.401775" elapsed="0.000045"/>
</return>
<msg time="2026-08-15T23:46:26.401976" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:26.401177" elapsed="0.000825"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.402151" elapsed="0.000229"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:26.400448" elapsed="0.001974"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:26.398008" elapsed="0.004449"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:26.402500" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:46:26.402657" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:26.396751" elapsed="0.005932"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.396342" elapsed="0.006400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.403034" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.402822" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.396295" elapsed="0.006874"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.404442" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:26.403463" elapsed="0.001027"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:26.404622" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:26.389573" elapsed="0.015301"/>
</kw>
<msg time="2026-08-15T23:46:26.405042" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:26.375121" elapsed="0.029975"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.417839" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.430911" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.443508" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.443702" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.444008" elapsed="0.000025"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.444541" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.444315" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:26.444300" elapsed="0.000465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.444969" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.445285" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.445636" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:26.444269" elapsed="0.001585"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.444129" elapsed="0.001756"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.446057" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.446135" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:26.446261" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:26.370641" elapsed="0.075648"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:26.447928" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.447507" elapsed="0.000610">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:26.448295" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:26.447005" elapsed="0.001315"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.448643" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.448392" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.449506" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:26.449015" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.448836" elapsed="0.000819"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.448373" elapsed="0.001307"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.456252" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:26.449915" elapsed="0.006364"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:26.456331" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:26.456486" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:26.446650" elapsed="0.009863"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:26.458350" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.457980" elapsed="0.000552">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:26.458712" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:26.457452" elapsed="0.001286"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:26.458987" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:26.458847" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.458791" elapsed="0.000279"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.459214" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.459381" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.459488" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:26.461623" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:26.457127" elapsed="0.004524"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.463465" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.462933" elapsed="0.000581"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.464155" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.463672" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:26.566769" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:26.567380" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:26.567864" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.466530" elapsed="0.102345">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:26.464269" elapsed="0.105069">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.569868" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.569425" elapsed="0.000883"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:26.464250" elapsed="0.106126">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.571618" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.572012" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:26.571917" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:26.571873" elapsed="0.000293"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.572508" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.572673" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.462099" elapsed="0.110918">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.573228" elapsed="0.000042"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.344130" elapsed="0.229348">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.574245" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.573698" elapsed="0.000723"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:26.573658" elapsed="0.000822"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.574555" elapsed="0.000036"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.334259" elapsed="0.240571">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:46:26.574980" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.101158" elapsed="32.473917">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:45:54.077041" elapsed="32.498149">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.583729" elapsed="0.000027"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.584091" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.584273" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:46:26.583900" elapsed="0.000439"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.583832" elapsed="0.000534"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:46:26.585759" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:46:26.585492" elapsed="0.000294"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.586433" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.585992" elapsed="0.000468"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:26.605050" elapsed="0.000870"/>
</kw>
<msg time="2026-08-15T23:46:26.606149" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:26.604675" elapsed="0.001544"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:26.604259" elapsed="0.002036"/>
</kw>
<msg time="2026-08-15T23:46:26.606337" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:26.595546" elapsed="0.010847"/>
</kw>
<msg time="2026-08-15T23:46:26.606493" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:26.595194" elapsed="0.011323"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.650337" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:26.649646" elapsed="0.000802"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:26.652081" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:26.651559" elapsed="0.000630">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:26.652314" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:26.650753" elapsed="0.001667"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.653945" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:26.652757" elapsed="0.001296"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:26.654643" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:26.654998" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:26.654429" elapsed="0.000674"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.655907" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.655396" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.657955" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.657643" elapsed="0.000358"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.658469" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.658202" elapsed="0.000293"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.659496" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:26.659036" elapsed="0.000487"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:26.660300" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.660078" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:26.660377" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:26.660531" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:26.659711" elapsed="0.000845"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.660705" elapsed="0.000289"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:26.658899" elapsed="0.002136"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.661597" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:26.661279" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:26.662424" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.662202" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:26.662499" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:26.662648" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:26.661835" elapsed="0.000838"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:26.662854" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:26.661149" elapsed="0.001966"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:26.658591" elapsed="0.004579"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:26.663256" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:46:26.663620" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:26.656870" elapsed="0.006838"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.656149" elapsed="0.007635"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.664103" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.663886" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.656126" elapsed="0.008212"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.665433" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:26.664486" elapsed="0.001054"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:26.665764" elapsed="0.000065"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:26.648579" elapsed="0.017370"/>
</kw>
<msg time="2026-08-15T23:46:26.666036" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:26.635779" elapsed="0.030321"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.678734" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.691269" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.704079" elapsed="0.000045"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.704299" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.704471" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.704912" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.704744" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:26.704729" elapsed="0.000264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.705129" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.705296" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.705457" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:26.704697" elapsed="0.000811"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.704546" elapsed="0.000988"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.705675" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:26.705750" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:26.705937" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:26.631394" elapsed="0.074570"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.707121" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.706847" elapsed="0.000323"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:26.723675" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:26.723911" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:26.724141" 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-08-15T23:46:26.709483" elapsed="0.014721"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.707240" elapsed="0.017064"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.724750" elapsed="0.000086"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.724370" elapsed="0.000566"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.707222" elapsed="0.017768"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.734453" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.728002" elapsed="0.006559"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.727417" elapsed="0.007227"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.727374" elapsed="0.007335"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.739985" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:26.735423" elapsed="0.004609"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.734888" elapsed="0.005179"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.734844" elapsed="0.005247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.740658" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:26.740264" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:26.741019" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.740760" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.741670" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:26.741260" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.741101" elapsed="0.000632"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.740742" elapsed="0.001012"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.742301" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:26.741938" 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-08-15T23:46:26.742627" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:26.742398" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:26.743286" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:26.742893" elapsed="0.000420"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:26.742708" elapsed="0.000640"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:26.742380" elapsed="0.000989"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:26.743518" elapsed="0.000489"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:46:26.744541" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:26.744173" elapsed="0.000396"/>
</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-08-15T23:46:26.744720" elapsed="0.005521"/>
</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-08-15T23:46:26.726304" elapsed="0.024001"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:46:26.750352" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:46:26.752901" 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-08-15T23:46:26.706223" elapsed="0.046705"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:46:26.752982" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:46:26.606732" elapsed="0.146373"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:46:26.585040" elapsed="0.168127"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:46:26.584562" elapsed="0.168658"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:45:53.734478" elapsed="33.018831">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:45:53.734083" elapsed="33.019337">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:45:53.733703" elapsed="33.019781">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:45:53.733150" elapsed="33.020431">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.758173" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:27.757335" elapsed="0.000908"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:46:27.758360" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:46:27.758776" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:46:27.756466" elapsed="0.002450"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:27.786937" elapsed="0.000909"/>
</kw>
<msg time="2026-08-15T23:46:27.788001" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:27.786396" elapsed="0.001673"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:27.785996" elapsed="0.002154"/>
</kw>
<msg time="2026-08-15T23:46:27.788194" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:27.777107" elapsed="0.011133"/>
</kw>
<msg time="2026-08-15T23:46:27.788345" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:27.776679" elapsed="0.011691"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.789287" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.788538" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.789794" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:27.789450" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.868248" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:27.867772" elapsed="0.000510"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:27.869202" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:27.868900" elapsed="0.000378">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:27.869374" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:27.868513" elapsed="0.000896"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.870056" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:27.869629" elapsed="0.000455"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:27.870532" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:27.870705" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:27.870382" elapsed="0.000349"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.871217" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:27.870963" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.872409" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:27.872142" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.872908" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.872613" elapsed="0.000321"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.873668" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.873328" elapsed="0.000367"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.874449" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.874225" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.874528" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:46:27.874693" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.873908" elapsed="0.000810"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.874893" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:46:27.873178" elapsed="0.001999"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.875724" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.875425" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.876478" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.876269" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.876552" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:27.876702" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.875954" elapsed="0.000773"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.876889" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:27.875295" elapsed="0.001858"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.877725" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.877418" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.878626" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.878415" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.878702" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:27.878871" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.877949" elapsed="0.000947"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.879046" elapsed="0.000221"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:46:27.877266" elapsed="0.002041"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.879878" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.879559" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.880611" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.880400" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.880687" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:27.880863" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.880086" elapsed="0.000803"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.881075" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:46:27.879428" elapsed="0.001911"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.881921" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.881598" elapsed="0.000349"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.882669" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.882442" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.882746" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:27.882918" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.882128" elapsed="0.000814"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.883091" elapsed="0.000228"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:46:27.881467" elapsed="0.001894"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.883920" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.883605" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.884649" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.884441" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.884724" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:27.884890" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.884128" elapsed="0.000787"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.885063" elapsed="0.000227"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:46:27.883475" elapsed="0.001855"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.885926" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.885611" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.886661" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.886445" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.886738" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:27.886910" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.886133" elapsed="0.000806"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.887090" elapsed="0.000239"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:46:27.885479" elapsed="0.001893"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.887965" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:27.887625" elapsed="0.000367"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:27.888720" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:27.888503" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:27.888815" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:46:27.888976" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:27.888180" 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-08-15T23:46:27.889155" elapsed="0.000421"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:27.887494" elapsed="0.002124"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:27.872990" elapsed="0.016667"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:27.889705" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:27.889891" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:27.871773" elapsed="0.018147"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:27.871396" elapsed="0.018558"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.890132" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:27.889980" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:27.871371" elapsed="0.018875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.891207" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:27.890449" elapsed="0.000787"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:27.891339" elapsed="0.000054"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:27.866560" elapsed="0.025058"/>
</kw>
<msg time="2026-08-15T23:46:27.891712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:27.808855" elapsed="0.082971"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.914336" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.936682" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.959896" elapsed="0.000073"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.960269" 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-08-15T23:46:27.960479" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.961173" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:27.960879" elapsed="0.000386"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:27.960860" elapsed="0.000498"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.961617" elapsed="0.000049"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.961993" elapsed="0.000048"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.962332" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:27.960790" elapsed="0.001718"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:27.960618" elapsed="0.001956"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:27.962728" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:27.962916" elapsed="0.000023"/>
</return>
<msg time="2026-08-15T23:46:27.963112" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:27.804304" elapsed="0.158836"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.992469" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:27.992052" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:27.993400" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:27.993098" elapsed="0.000381">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:27.993577" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:27.992731" elapsed="0.000870"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.994264" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:27.993856" elapsed="0.000436"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:27.994655" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:27.994860" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:27.994506" elapsed="0.000385"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.995359" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:27.995103" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:46:27.995907" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:27.995546" elapsed="0.000422"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.996703" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:27.996142" elapsed="0.000589"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:27.995995" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:27.995521" elapsed="0.001268"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:27.998042" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:27.997024" elapsed="0.001050"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:27.998178" elapsed="0.000061"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:27.991004" elapsed="0.007470"/>
</kw>
<msg time="2026-08-15T23:46:27.998567" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:27.977074" elapsed="0.021591"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.021083" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.043419" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.065978" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.066222" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.066417" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.067029" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.066734" elapsed="0.000381"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:28.066718" elapsed="0.000485"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.067405" elapsed="0.000046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.067742" elapsed="0.000045"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.068098" elapsed="0.000046"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:28.066685" elapsed="0.001584"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.066548" elapsed="0.001783"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.068482" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.068636" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:46:28.068768" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:27.973959" elapsed="0.094859"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:28.071432" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.070907" elapsed="0.000648">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:28.071685" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:28.069578" elapsed="0.002132"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.072215" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.071864" elapsed="0.000507"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.073588" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:28.072931" elapsed="0.000700"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.072398" elapsed="0.001314"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.071842" elapsed="0.001894"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.076718" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:28.074027" elapsed="0.002718"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:28.076900" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:46:28.077061" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:28.069210" elapsed="0.007876"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.079126" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.078628" elapsed="0.000560"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.079848" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.079354" elapsed="0.000565"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.080554" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.080085" elapsed="0.000531"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.081271" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.080785" elapsed="0.000547"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:46:28.083005" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:46:28.082357" elapsed="0.000748"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:46:28.083974" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:46:28.083367" elapsed="0.000707"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.084336" elapsed="0.000554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.085920" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.085158" elapsed="0.000959"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:46:28.086205" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:46:28.086479" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:46:28.081566" elapsed="0.004940"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:28.109069" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:46:28.109153" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:28.109311" 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-08-15T23:46:28.095099" elapsed="0.014273"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.086791" elapsed="0.022699"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.109703" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.109520" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.086596" elapsed="0.023361"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.114158" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.111619" elapsed="0.002604"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.111154" elapsed="0.003117"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.111121" elapsed="0.003219"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.117674" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.114975" elapsed="0.002790"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.114426" elapsed="0.003409"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.114395" elapsed="0.003513"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.119451" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:28.118419" elapsed="0.001132"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.120241" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.119731" elapsed="0.000606"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.121222" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:28.120740" elapsed="0.000519"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.120405" elapsed="0.000903"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.119696" elapsed="0.001693"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.123061" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:28.121957" elapsed="0.001203"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.123769" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.123291" elapsed="0.000592"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.124748" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:28.124287" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.123952" elapsed="0.000951"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.123257" elapsed="0.001713"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:28.125221" elapsed="0.000834"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:46:28.127051" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:28.126329" elapsed="0.000821"/>
</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-08-15T23:46:28.127425" elapsed="0.002760"/>
</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-08-15T23:46:28.110417" elapsed="0.019875"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:46:28.130524" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-08-15T23:46:28.130376" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.130356" elapsed="0.000308"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.130867" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.130979" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:28.133311" 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-08-15T23:46:28.077678" elapsed="0.055675"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:46:28.133417" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:28.133573" 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-08-15T23:46:27.792962" elapsed="0.340636"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.133954" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.133700" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.133683" elapsed="0.000363"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:46:28.134080" elapsed="0.000026"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:46:27.790146" elapsed="0.344056"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:27.789913" elapsed="0.344332"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:27.789394" elapsed="0.344872"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.134407" elapsed="0.000244"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:46:27.760560" elapsed="0.374154"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:46:27.759231" elapsed="0.375608"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.135456" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.135003" elapsed="0.000481"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:28.154383" elapsed="0.000803"/>
</kw>
<msg time="2026-08-15T23:46:28.155238" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:28.154016" elapsed="0.001275"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:28.153604" elapsed="0.001764"/>
</kw>
<msg time="2026-08-15T23:46:28.155410" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:28.144711" elapsed="0.010744"/>
</kw>
<msg time="2026-08-15T23:46:28.155557" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:28.144369" elapsed="0.011212"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.204948" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:28.204337" elapsed="0.000665"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:28.206078" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.205821" elapsed="0.000334">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:28.206364" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:28.205358" elapsed="0.001053"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.207437" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:28.206778" elapsed="0.000712"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:28.208249" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:28.208518" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:28.207986" elapsed="0.000580"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.209297" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.208924" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.210649" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.210382" elapsed="0.000313"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.211143" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.210869" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.212067" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:28.211536" elapsed="0.000557"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:28.212868" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.212597" elapsed="0.000299"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:28.213002" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:46:28.213182" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:28.212280" elapsed="0.000930"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.213393" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:28.211402" elapsed="0.002274"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.214259" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:28.213956" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:28.215011" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.214781" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:28.215088" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:28.215238" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:28.214467" elapsed="0.000797"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:28.215411" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:28.213794" elapsed="0.001878"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:28.211224" elapsed="0.004483"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:28.215751" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:46:28.215937" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:28.210055" elapsed="0.005909"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.209597" elapsed="0.006426"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.216292" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.216083" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.209551" elapsed="0.006874"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.217545" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:28.216724" elapsed="0.000870"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:28.217723" elapsed="0.000088"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:28.202760" elapsed="0.015215"/>
</kw>
<msg time="2026-08-15T23:46:28.218142" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:28.188354" elapsed="0.029841"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.231054" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.243895" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.256537" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.256773" elapsed="0.000044"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.256976" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.257486" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.257241" elapsed="0.000391"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:28.257225" elapsed="0.000489"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.257925" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.258247" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.258594" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:28.257193" elapsed="0.001595"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.257053" elapsed="0.001781"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.258983" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.259059" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:28.259181" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:28.183869" elapsed="0.075338"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:28.260785" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.260405" elapsed="0.000618">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:28.261207" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:28.259911" elapsed="0.001322"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.261599" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.261344" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.262474" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:28.261971" elapsed="0.000545"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:28.261770" elapsed="0.000854"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.261287" elapsed="0.001362"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.269454" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:28.262867" elapsed="0.006616"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:28.269535" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:28.269690" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:28.259565" elapsed="0.010150"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:28.271309" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.270910" elapsed="0.000586">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:28.271678" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:28.270401" elapsed="0.001306"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:28.271945" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:28.271783" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:28.271764" elapsed="0.000315"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.272232" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.272406" elapsed="0.000025"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.272480" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:28.274549" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:28.270077" elapsed="0.004499"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.276299" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.275818" elapsed="0.000532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:28.277001" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:28.276504" elapsed="0.000545"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:28.293418" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:28.293793" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:28.294153" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.279511" elapsed="0.015234">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:28.277119" elapsed="0.017941">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.295323" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.295111" elapsed="0.000452"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:28.277100" elapsed="0.018502">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.296298" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.296488" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:28.296435" elapsed="0.000111"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:28.296411" elapsed="0.000165"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.296778" elapsed="0.000055"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.296903" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.274972" elapsed="0.022084">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.297162" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.160868" elapsed="0.136443">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:28.297702" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:28.297441" elapsed="0.000471"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:28.297417" elapsed="0.000531"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:28.297996" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.156374" elapsed="0.141767">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.353064" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:31.352405" elapsed="0.000715"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:31.354205" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.353936" elapsed="0.000347">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:31.354483" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:31.353468" elapsed="0.001060"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.355532" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:31.354942" elapsed="0.000638"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:31.356257" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:31.356516" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:31.356008" elapsed="0.000553"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.357335" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:31.356934" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.358603" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:31.358343" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.359199" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:31.358861" elapsed="0.000376"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.360163" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:31.359717" elapsed="0.000473"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:31.360953" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:31.360709" elapsed="0.000286"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:31.361052" elapsed="0.000040"/>
</return>
<msg time="2026-08-15T23:46:31.361222" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:31.360385" elapsed="0.000862"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:31.361399" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:31.359574" elapsed="0.002109"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.362245" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:31.361947" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:31.363163" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:31.362954" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:31.363240" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:31.363454" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:31.362451" elapsed="0.001028"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:31.363630" elapsed="0.000236"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:31.361816" elapsed="0.002091"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:31.359317" elapsed="0.004626"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:31.363988" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:46:31.364146" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:31.358015" elapsed="0.006156"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:31.357589" elapsed="0.006643"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.364501" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:31.364291" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:31.357543" elapsed="0.007091"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.365868" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:31.364963" elapsed="0.000954"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:31.366048" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:31.350775" elapsed="0.015507"/>
</kw>
<msg time="2026-08-15T23:46:31.366452" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:31.336324" elapsed="0.030186"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.381676" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.394486" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.407254" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.407454" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.407652" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.408162" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:31.407943" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:31.407927" elapsed="0.000458"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.408564" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.408961" elapsed="0.000039"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.409341" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:31.407894" elapsed="0.001646"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.407737" elapsed="0.001833"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.409747" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.409852" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:46:31.409979" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:31.332033" elapsed="0.077973"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:31.411668" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.411264" elapsed="0.000690">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:31.412137" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:31.410721" elapsed="0.001442"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.412487" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:31.412237" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.413426" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:31.412906" elapsed="0.000562"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:31.412653" elapsed="0.000925"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:31.412217" elapsed="0.001386"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.420739" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:31.413755" elapsed="0.007013"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:31.420863" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:46:31.421038" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:31.410373" elapsed="0.010691"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:31.422637" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.422263" elapsed="0.000600">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:31.423046" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:31.421739" elapsed="0.001333"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:31.423285" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:46:31.423145" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:31.423125" elapsed="0.000244"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.423515" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.423687" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.423754" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:31.425897" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:31.421393" elapsed="0.004532"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.427637" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:31.427175" elapsed="0.000510"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:31.428306" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:31.427853" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:31.523404" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:31.523985" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:31.524405" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.430692" elapsed="0.094681">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:31.428422" elapsed="0.097429">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.526290" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:31.525936" elapsed="0.000745"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:31.428403" elapsed="0.098340">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.527920" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.528233" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:31.528146" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:31.528108" elapsed="0.000264"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.528686" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.528922" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.426291" elapsed="0.102940">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.529400" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.308500" elapsed="0.221120">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:31.530350" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:31.529932" elapsed="0.000580"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:31.529785" elapsed="0.000780"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:31.530637" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:31.299222" elapsed="0.231696">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.590984" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:34.590296" elapsed="0.000746"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:34.592193" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.591895" elapsed="0.000381">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:34.592480" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:34.591405" elapsed="0.001121"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.593579" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:34.592900" elapsed="0.000729"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:34.594379" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:34.594646" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:34.594110" elapsed="0.000584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.595432" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:34.595055" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.596849" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:34.596565" elapsed="0.000333"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.597392" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:34.597058" elapsed="0.000366"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.598224" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:34.597895" elapsed="0.000356"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:34.599024" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:34.598769" elapsed="0.000282"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:34.599109" elapsed="0.000043"/>
</return>
<msg time="2026-08-15T23:46:34.599288" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:34.598444" 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-08-15T23:46:34.599470" elapsed="0.000249"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:34.597680" elapsed="0.002081"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.600358" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:34.600041" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:34.602730" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:34.602506" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:34.602834" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:46:34.602999" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:34.600571" elapsed="0.002454"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:34.603177" elapsed="0.000229"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:34.599906" elapsed="0.003542"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:34.597485" elapsed="0.006000"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:34.603532" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:34.603694" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:34.596227" elapsed="0.007494"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:34.595707" elapsed="0.008076"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.604096" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:34.603877" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:34.595646" elapsed="0.008635"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.605478" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:34.604590" elapsed="0.000939"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:34.605667" elapsed="0.000079"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:34.588605" elapsed="0.017338"/>
</kw>
<msg time="2026-08-15T23:46:34.606136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:34.573002" elapsed="0.033192"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.619962" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.633035" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.646744" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.646975" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.647162" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.647652" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:34.647435" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:34.647419" elapsed="0.000490"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.648090" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.648421" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.648776" elapsed="0.000027"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:34.647387" elapsed="0.001607"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.647247" elapsed="0.001779"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.649197" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.649278" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:46:34.649403" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:34.568400" elapsed="0.081065"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:34.651366" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.650894" elapsed="0.000670">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:34.651752" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:34.650239" elapsed="0.001539"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.652151" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:34.651886" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.653115" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:34.652512" elapsed="0.000652"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:34.652329" elapsed="0.000947"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:34.651865" elapsed="0.001438"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.660262" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:34.653457" elapsed="0.006836"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:34.660348" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:46:34.660512" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:34.649882" elapsed="0.010657"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:34.662213" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.661768" elapsed="0.000636">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:34.662588" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:34.661260" elapsed="0.001354"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:34.662857" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:46:34.662689" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:34.662669" elapsed="0.000277"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.663096" elapsed="0.000028"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.663278" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.663346" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:34.665436" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:34.660906" elapsed="0.004558"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.667274" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:34.666751" elapsed="0.000573"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:34.667971" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:34.667480" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:34.774596" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:34.775303" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:34.775921" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.670438" elapsed="0.106525">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:34.668090" elapsed="0.109393">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.778035" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:34.777578" elapsed="0.000909"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:34.668071" elapsed="0.110490">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.779942" elapsed="0.000046"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.780168" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:34.780098" elapsed="0.000135"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:34.780071" elapsed="0.000194"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.780474" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.780577" elapsed="0.000028"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.665872" elapsed="0.114890">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.780912" elapsed="0.000025"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.541439" elapsed="0.239617">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:34.781470" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:34.781209" elapsed="0.000366"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:34.781182" elapsed="0.000428"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:34.781657" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:34.532283" elapsed="0.249555">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.838299" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:37.837660" elapsed="0.000695"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:37.839445" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.839180" elapsed="0.000342">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:37.839718" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:37.838706" elapsed="0.001056"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.840730" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:37.840135" elapsed="0.000642"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:37.841561" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:37.841868" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:37.841310" elapsed="0.000608"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.842617" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:37.842255" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.843947" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:37.843665" elapsed="0.000329"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.844425" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:37.844154" elapsed="0.000298"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.845153" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:37.844846" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:37.846025" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:37.845704" elapsed="0.000348"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:37.846106" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:46:37.846268" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:37.845364" elapsed="0.000929"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:37.846447" elapsed="0.000245"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:37.844682" elapsed="0.002050"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.847316" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:37.847017" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:37.848230" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:37.848012" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:37.848307" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:37.848459" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:37.847525" elapsed="0.000959"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:37.848635" elapsed="0.000240"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:37.846884" elapsed="0.002032"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:37.844505" elapsed="0.004446"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:37.848995" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:46:37.849153" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:37.843332" elapsed="0.005847"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:37.842929" elapsed="0.006307"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.849508" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:37.849295" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:37.842882" elapsed="0.006761"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.850784" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:37.849999" elapsed="0.000853"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:37.850988" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:37.836068" elapsed="0.015154"/>
</kw>
<msg time="2026-08-15T23:46:37.851389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:37.821422" elapsed="0.030022"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.864315" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.877036" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.889704" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.889947" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.890125" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.890623" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:37.890382" elapsed="0.000387"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:37.890367" elapsed="0.000508"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.891058" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.891369" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.891717" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:37.890336" elapsed="0.001601"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:37.890200" elapsed="0.001767"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.892115" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:37.892191" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:37.892312" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:37.817014" elapsed="0.075324"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:37.893973" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.893540" elapsed="0.000623">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:37.894340" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:37.893045" elapsed="0.001321"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.894718" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:37.894439" elapsed="0.000470"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.895612" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:37.895117" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:37.894939" elapsed="0.000823"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:37.894420" elapsed="0.001366"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.902589" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:37.896015" elapsed="0.006602"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:37.902671" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:37.902863" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:37.892696" elapsed="0.010194"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:37.904418" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.904050" elapsed="0.000550">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:37.904781" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:37.903543" elapsed="0.001289"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:37.905043" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:37.904906" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:37.904887" elapsed="0.000247"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.905279" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:37.905447" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:37.905512" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:37.907621" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:37.903218" elapsed="0.004430"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.909315" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:37.908859" elapsed="0.000503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:37.909982" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:37.909514" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:38.022400" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:38.023034" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:38.023470" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.912374" elapsed="0.112164">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:37.910108" elapsed="0.114870">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:38.025295" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:38.025034" elapsed="0.000505"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:37.910089" elapsed="0.115489">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:38.026364" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:38.026601" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:38.026512" elapsed="0.000153"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:38.026487" elapsed="0.000215"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:38.026981" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:38.027084" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.908029" elapsed="0.119212">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:38.027349" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.794013" elapsed="0.233476">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:38.027923" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:38.027619" elapsed="0.000415"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:38.027595" elapsed="0.000473"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:38.028114" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:37.782948" elapsed="0.245308">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.088924" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:41.088099" elapsed="0.000892"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:41.090130" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.089852" elapsed="0.000357">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:41.090407" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:41.089348" elapsed="0.001103"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.091430" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:41.090787" elapsed="0.000714"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:41.092247" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:41.092514" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:41.091987" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.093311" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:41.092929" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.094669" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:41.094406" elapsed="0.000311"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.095286" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:41.094998" elapsed="0.000315"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.096085" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:41.095740" elapsed="0.000373"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:41.096946" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:41.096633" elapsed="0.000341"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:41.097028" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:46:41.097192" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:41.096304" 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-08-15T23:46:41.097371" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:41.095586" elapsed="0.002067"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.098245" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:41.097936" elapsed="0.000336"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:41.099182" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:41.098966" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:41.099261" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:41.099415" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:41.098457" elapsed="0.000983"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:41.099613" elapsed="0.000242"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:41.097769" elapsed="0.002127"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:41.095369" elapsed="0.004563"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:41.099977" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:46:41.100135" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:41.094068" elapsed="0.006093"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:41.093572" elapsed="0.006649"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.100491" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:41.100281" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:41.093525" elapsed="0.007098"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.101765" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:41.100956" elapsed="0.000882"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:41.101983" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:41.086068" elapsed="0.016149"/>
</kw>
<msg time="2026-08-15T23:46:41.102387" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:41.070908" elapsed="0.031536"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.115561" elapsed="0.000056"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.128499" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.141607" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.141828" elapsed="0.000030"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.142020" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.142509" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:41.142289" elapsed="0.000368"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:41.142273" elapsed="0.000465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.142952" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.143286" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.143643" elapsed="0.000052"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:41.142241" elapsed="0.001671"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.142100" elapsed="0.001845"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.144098" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.144178" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:41.144301" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:41.066483" elapsed="0.077846"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:41.146063" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.145574" elapsed="0.000688">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:41.146447" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:41.145062" elapsed="0.001412"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.146802" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:41.146548" elapsed="0.000424"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.147711" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:41.147180" elapsed="0.000579"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:41.147001" elapsed="0.000951"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:41.146528" elapsed="0.001452"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.154968" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:41.148135" elapsed="0.006862"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:41.155052" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:41.155213" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:41.144696" elapsed="0.010542"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:41.156926" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.156525" elapsed="0.000597">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:41.157304" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:41.156018" elapsed="0.001312"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:41.157543" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:46:41.157404" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:41.157384" elapsed="0.000244"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.157774" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.158044" elapsed="0.000023"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.158114" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:41.160139" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:41.155609" elapsed="0.004558"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.161893" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:41.161393" elapsed="0.000555"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:41.162564" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:41.162101" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:41.271344" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:41.271989" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:41.272513" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.165049" elapsed="0.108486">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:41.162682" elapsed="0.111385">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.274689" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:41.274174" elapsed="0.000968"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:41.162663" elapsed="0.112545">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.276473" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.276850" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:41.276715" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:41.276670" elapsed="0.000340"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.277340" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.277497" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.160535" elapsed="0.117221">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.278100" elapsed="0.000040"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.040638" elapsed="0.237699">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:41.279011" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:41.278557" elapsed="0.000621"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:41.278512" elapsed="0.000722"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:41.279308" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:41.029311" elapsed="0.250229">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.332220" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:44.331589" elapsed="0.000686"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:44.333383" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.333116" elapsed="0.000346">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:44.333658" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:44.332620" elapsed="0.001084"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.334678" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:44.334073" elapsed="0.000653"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:44.335343" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:44.335614" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:44.335086" elapsed="0.000573"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.336379" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:44.336019" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.337959" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:44.337675" elapsed="0.000330"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.338436" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:44.338164" elapsed="0.000298"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.339191" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:44.338883" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:44.339961" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:44.339716" elapsed="0.000272"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:44.340040" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:46:44.340203" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:44.339401" elapsed="0.000828"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:44.340449" elapsed="0.000250"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:44.338694" elapsed="0.002047"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.341335" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:44.341015" elapsed="0.000346"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:44.342257" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:44.342043" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:44.342334" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:44.342487" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:44.341693" elapsed="0.000819"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:44.342660" elapsed="0.000241"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:44.340882" elapsed="0.002060"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:44.338515" elapsed="0.004462"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:44.343022" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:46:44.343185" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:44.337342" elapsed="0.005869"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:44.336690" elapsed="0.006578"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.343535" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:44.343327" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:44.336643" elapsed="0.007026"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.344780" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:44.343993" elapsed="0.000853"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:44.344979" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:44.330016" elapsed="0.015225"/>
</kw>
<msg time="2026-08-15T23:46:44.345409" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:44.315571" elapsed="0.029893"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.358358" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.371051" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.383741" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.383990" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.384167" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.384640" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:44.384425" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:44.384410" elapsed="0.000479"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.385069" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.385412" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.385772" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:44.384379" elapsed="0.001607"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.384243" elapsed="0.001773"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.386162" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.386239" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:44.386360" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:44.311223" elapsed="0.075164"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:44.388009" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.387599" elapsed="0.000597">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:44.388377" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:44.387100" elapsed="0.001307"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.388729" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:44.388480" elapsed="0.000412"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.389602" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:44.389097" elapsed="0.000545"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:44.388921" elapsed="0.000828"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:44.388461" elapsed="0.001312"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.396671" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:44.389997" elapsed="0.006702"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:44.396751" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:44.396924" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:44.386749" elapsed="0.010201"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:44.398552" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.398183" elapsed="0.000556">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:44.398941" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:44.397626" elapsed="0.001340"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:44.399181" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:44.399043" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:44.399023" elapsed="0.000242"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.399444" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.399612" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.399678" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:44.401686" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:44.397296" elapsed="0.004417"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.403404" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:44.402950" elapsed="0.000502"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:44.404075" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:44.403602" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:44.518162" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:44.518506" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:44.518768" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.406482" elapsed="0.112901">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:44.404190" elapsed="0.115465">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.519974" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:44.519709" elapsed="0.000578"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:44.404171" elapsed="0.116157">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.521033" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.521233" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:44.521177" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:44.521153" elapsed="0.000172"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.521544" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.521648" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.402119" elapsed="0.119713">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.521943" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.287328" elapsed="0.234762">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:44.522472" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:44.522219" elapsed="0.000416"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:44.522195" elapsed="0.000476"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:44.522717" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:44.280411" elapsed="0.242508">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.581027" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:47.580394" elapsed="0.000688"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:47.582198" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.581904" elapsed="0.000374">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:47.582477" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:47.581435" elapsed="0.001087"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.583523" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:47.582887" elapsed="0.000686"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:47.584320" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:47.584585" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:47.584063" elapsed="0.000573"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.585350" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:47.584987" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.586651" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:47.586391" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.587144" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:47.586869" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.587928" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:47.587538" elapsed="0.000417"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:47.588685" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:47.588462" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:47.588763" elapsed="0.000048"/>
</return>
<msg time="2026-08-15T23:46:47.588940" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:47.588146" elapsed="0.000819"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:47.589113" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:47.587406" elapsed="0.001989"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.589956" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:47.589640" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:47.592276" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:47.592027" elapsed="0.000277"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:47.592357" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:46:47.592527" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:47.591618" elapsed="0.000939"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:47.592718" elapsed="0.000318"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:47.589511" elapsed="0.003568"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:47.587227" elapsed="0.005887"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:47.593161" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:47.593325" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:47.586061" elapsed="0.007290"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:47.585605" elapsed="0.007808"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.593689" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:47.593475" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:47.585559" elapsed="0.008289"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.594979" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:47.594157" elapsed="0.000871"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:47.595164" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:47.578756" elapsed="0.016649"/>
</kw>
<msg time="2026-08-15T23:46:47.595577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:47.564203" elapsed="0.031430"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.609530" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.622825" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.636114" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.636315" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.636500" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.637041" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:47.636817" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:47.636784" elapsed="0.000481"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.637443" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.637756" elapsed="0.000027"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.638134" elapsed="0.000059"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:47.636751" elapsed="0.001620"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.636591" elapsed="0.001810"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.638548" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.638627" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:47.638751" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:47.559864" elapsed="0.078913"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:47.640457" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.640059" elapsed="0.000606">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:47.640871" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:47.639495" elapsed="0.001402"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.641339" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:47.640973" elapsed="0.000561"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.642672" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:47.641964" elapsed="0.000766"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:47.641574" elapsed="0.001333"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:47.640953" elapsed="0.001992"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.650443" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:47.643159" elapsed="0.007312"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:47.650525" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:47.650684" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:47.639161" elapsed="0.011548"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:47.652374" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.651959" elapsed="0.000605">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:47.652755" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:47.651397" elapsed="0.001383"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:47.653013" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:47.652872" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:47.652851" elapsed="0.000248"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.653244" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.653412" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.653479" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:47.655476" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:47.651054" elapsed="0.004449"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.657245" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:47.656763" elapsed="0.000538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:47.657935" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:47.657453" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:47.751050" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:47.751583" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:47.752042" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.660419" elapsed="0.092651">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:47.658092" elapsed="0.095410">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.754005" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:47.753586" elapsed="0.000806"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:47.658073" elapsed="0.096381">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.755546" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.755943" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:47.755772" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:47.755733" elapsed="0.000356"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.756437" elapsed="0.000053"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.756601" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.655910" elapsed="0.100973">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.757058" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.534146" elapsed="0.223133">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:47.757947" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:47.757487" elapsed="0.000625"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:47.757448" elapsed="0.000718"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:47.758240" elapsed="0.000032"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:47.524155" elapsed="0.234309">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.816921" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:50.816253" elapsed="0.000726"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:50.818177" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.817906" elapsed="0.000348">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:50.818457" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:50.817407" elapsed="0.001096"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.819590" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:50.818952" elapsed="0.000688"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:50.820375" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:50.820638" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:50.820118" elapsed="0.000568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.821485" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:50.821109" elapsed="0.000475"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.822889" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:50.822587" elapsed="0.000349"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.823370" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:50.823096" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.824113" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:50.823772" elapsed="0.000369"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:50.824968" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:50.824648" elapsed="0.000349"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:50.825051" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:46:50.825217" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:50.824328" elapsed="0.000915"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:50.825402" elapsed="0.000246"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:50.823637" elapsed="0.002054"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.826266" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:50.825959" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:50.827206" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:50.826986" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:50.827288" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:50.827445" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:50.826476" elapsed="0.000994"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:50.827623" elapsed="0.000247"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:50.825826" elapsed="0.002086"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:50.823455" elapsed="0.004493"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:50.827995" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:50.828163" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:50.822226" elapsed="0.005964"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:50.821747" elapsed="0.006505"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.828535" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:50.828314" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:50.821700" elapsed="0.006971"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.829880" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:50.829027" elapsed="0.000942"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:50.830104" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:50.814473" elapsed="0.015867"/>
</kw>
<msg time="2026-08-15T23:46:50.830510" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:50.798900" elapsed="0.031666"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.843511" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.856275" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.869100" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.869296" elapsed="0.000065"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.869514" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.870051" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:50.869830" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:50.869795" elapsed="0.000477"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.870448" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.870761" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.871133" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:50.869761" elapsed="0.001567"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:50.869596" elapsed="0.001762"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.871506" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:50.871583" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:50.871705" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:50.794364" elapsed="0.077367"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:50.873409" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.873018" elapsed="0.000581">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:50.873779" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:50.872483" elapsed="0.001382"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.874189" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:50.873941" elapsed="0.000385"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.875084" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:50.874530" elapsed="0.000594"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:50.874354" elapsed="0.000879"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:50.873921" elapsed="0.001336"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.882052" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:50.875410" elapsed="0.006670"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:50.882134" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:46:50.882311" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:50.872154" elapsed="0.010183"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:50.883932" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.883518" elapsed="0.000603">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:50.884303" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:50.883028" elapsed="0.001301"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:50.884538" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:50.884400" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:50.884382" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.884767" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:50.884989" elapsed="0.000023"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:50.885060" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:50.887114" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:50.882664" elapsed="0.004476"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.888827" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:50.888349" elapsed="0.000527"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:50.889639" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:50.889175" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:50.997890" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:50.998430" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:50.998882" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.892107" elapsed="0.107831">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:50.889755" elapsed="0.110722">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:51.001004" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:51.000563" elapsed="0.000871"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:50.889736" elapsed="0.111765">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:51.002706" elapsed="0.000064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:51.003099" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:51.003011" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:51.002969" elapsed="0.000274"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:51.003566" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:51.003725" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.887498" elapsed="0.116516">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:51.004186" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.769274" elapsed="0.235138">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:51.005133" elapsed="0.000073"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:51.004616" elapsed="0.000721"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:51.004578" elapsed="0.000817"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:51.005469" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:50.759567" elapsed="0.246134">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.062119" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:54.061490" elapsed="0.000685"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:54.063260" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.062992" elapsed="0.000342">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:54.063534" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:54.062525" elapsed="0.001054"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.064545" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:54.063946" elapsed="0.000645"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:54.065508" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:54.065860" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:54.065256" elapsed="0.000651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.066596" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:54.066235" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.067910" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:54.067625" elapsed="0.000332"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.068389" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:54.068114" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.069168" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:54.068856" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:54.070018" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:54.069704" elapsed="0.000341"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:54.070099" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:46:54.070264" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:54.069386" elapsed="0.000902"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:54.070440" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:54.068693" elapsed="0.002028"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.071288" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:54.070985" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:54.072212" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:54.071995" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:54.072291" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:46:54.072444" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:54.071497" elapsed="0.000972"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:54.072639" elapsed="0.000241"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:54.070853" elapsed="0.002069"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:54.068472" elapsed="0.004485"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:54.073002" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:46:54.073161" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:54.067298" elapsed="0.005890"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:54.066890" elapsed="0.006357"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.073523" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:54.073308" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:54.066843" elapsed="0.006814"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.074765" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:54.073979" elapsed="0.000853"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:54.074967" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:54.059885" elapsed="0.015322"/>
</kw>
<msg time="2026-08-15T23:46:54.075377" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:54.045280" elapsed="0.030152"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.088331" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.101020" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.113829" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.114025" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.114199" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.114673" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:54.114459" elapsed="0.000383"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:54.114443" elapsed="0.000479"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.115098" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.115412" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.115763" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:54.114412" elapsed="0.001564"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.114276" elapsed="0.001730"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.116153" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.116231" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:46:54.116354" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:54.040883" elapsed="0.075498"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:54.118073" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.117649" elapsed="0.000619">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:54.118449" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:54.117140" elapsed="0.001335"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.118793" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:54.118547" elapsed="0.000444"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.119704" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:54.119203" elapsed="0.000542"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:54.119021" elapsed="0.000931"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:54.118528" elapsed="0.001450"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.126736" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:54.120131" elapsed="0.006633"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:54.126863" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:46:54.127023" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:54.116785" elapsed="0.010263"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:54.128616" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.128244" elapsed="0.000617">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:54.129042" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:54.127695" elapsed="0.001373"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:54.129276" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:46:54.129140" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:54.129120" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.129501" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.129667" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.129733" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:46:54.131772" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:54.127372" elapsed="0.004448"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.133527" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:54.133062" elapsed="0.000513"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:54.134196" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:54.133724" elapsed="0.000519"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:54.241537" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:54.242119" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:54.242532" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.136551" elapsed="0.106924">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:54.134310" elapsed="0.109650">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.244424" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:54.244049" elapsed="0.000823"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:54.134292" elapsed="0.110648">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.246129" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.246539" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:54.246447" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:54.246405" elapsed="0.000282"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.247083" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.247245" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.132177" elapsed="0.115315">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.247665" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.017614" elapsed="0.230318">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:54.248551" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:54.248145" elapsed="0.000582"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:54.248105" elapsed="0.000679"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:54.248960" elapsed="0.000036"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:54.006776" elapsed="0.242427">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.308322" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:57.307648" elapsed="0.000731"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:57.309507" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.309210" elapsed="0.000375">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:57.309784" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:57.308732" elapsed="0.001121"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.310936" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:57.310201" elapsed="0.000786"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:46:57.311582" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:46:57.312004" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:46:57.311329" elapsed="0.000725"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.312767" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:57.312399" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.314108" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:57.313841" elapsed="0.000314"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.314696" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:46:57.314415" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.315481" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:57.315170" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:57.316304" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:57.316079" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:57.316383" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:46:57.316544" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:57.315724" elapsed="0.000846"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:57.316722" elapsed="0.000275"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:46:57.315034" elapsed="0.002005"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.317588" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:46:57.317287" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:46:57.318501" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:46:57.318279" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:46:57.318578" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:57.318732" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:46:57.317813" elapsed="0.000945"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:46:57.318941" elapsed="0.000230"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:46:57.317155" elapsed="0.002057"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:46:57.314779" elapsed="0.004470"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:46:57.319293" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:46:57.319450" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:46:57.313494" elapsed="0.005982"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:57.313085" elapsed="0.006451"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.319888" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:57.319598" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:57.313039" elapsed="0.006989"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.321150" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:46:57.320333" elapsed="0.000866"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:46:57.321337" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:46:57.306082" elapsed="0.015492"/>
</kw>
<msg time="2026-08-15T23:46:57.321745" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:46:57.289735" elapsed="0.032090"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.334891" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.349077" elapsed="0.000041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.362982" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.363181" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.363354" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.363875" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:57.363621" elapsed="0.000401"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:57.363601" elapsed="0.000497"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.364274" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.364585" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.364972" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:46:57.363566" elapsed="0.001603"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.363430" elapsed="0.001768"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.365344" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.365421" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:57.365543" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:46:57.284961" elapsed="0.080609"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:57.367203" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.366818" elapsed="0.000576">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:57.367576" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:57.366288" elapsed="0.001314"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.368036" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:57.367681" elapsed="0.000494"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.368923" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:46:57.368381" elapsed="0.000584"/>
</kw>
<status status="PASS" start="2026-08-15T23:46:57.368203" elapsed="0.000870"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:57.367657" elapsed="0.001440"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.375942" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:46:57.369248" elapsed="0.006723"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:46:57.376025" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:46:57.376182" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:57.365960" elapsed="0.010247"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:46:57.377762" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.377391" elapsed="0.000654">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:46:57.378262" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:46:57.376890" elapsed="0.001398"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:46:57.378515" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:46:57.378361" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:46:57.378342" elapsed="0.000261"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.378747" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.378954" elapsed="0.000026"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.379031" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:46:57.381016" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:46:57.376535" elapsed="0.004508"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.382706" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:57.382248" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:46:57.383402" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:46:57.382948" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:46:57.484919" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:46:57.485285" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:46:57.485559" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.385787" elapsed="0.100393">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:46:57.383517" elapsed="0.102942">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.486783" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:57.486514" elapsed="0.000553"/>
</branch>
<status status="FAIL" start="2026-08-15T23:46:57.383498" elapsed="0.103619">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.487917" elapsed="0.000043"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.488129" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:46:57.488073" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:57.488046" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.488427" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.488537" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.381405" elapsed="0.107292">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.488836" elapsed="0.000026"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.260548" elapsed="0.228504">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:46:57.489499" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:46:57.489189" elapsed="0.000417"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:46:57.489165" elapsed="0.000476"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:46:57.489688" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:46:57.250371" elapsed="0.239515">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.549648" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:00.549050" elapsed="0.000652"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:00.550874" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.550586" elapsed="0.000364">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:00.551148" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:00.550078" elapsed="0.001115"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.552169" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:00.551544" elapsed="0.000672"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:00.552944" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:00.553214" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:00.552552" elapsed="0.000708"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.553964" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.553588" elapsed="0.000472"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.555307" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.555047" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.555778" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.555509" elapsed="0.000330"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.556514" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:00.556211" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:00.557338" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.557109" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:00.557418" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:47:00.557578" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:00.556725" elapsed="0.000878"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.557754" elapsed="0.000264"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:00.556077" elapsed="0.001982"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.558721" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:00.558352" elapsed="0.000396"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:00.560969" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.560723" elapsed="0.000274"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:00.561051" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:00.561207" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:00.560373" elapsed="0.000860"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.561394" elapsed="0.000240"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:00.558174" elapsed="0.003503"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:00.555898" elapsed="0.005819"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:00.561764" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:00.561954" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:00.554671" elapsed="0.007311"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.554218" elapsed="0.007826"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.562365" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.562107" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.554172" elapsed="0.008338"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.563639" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:00.562841" elapsed="0.000847"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:00.563839" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:00.547493" elapsed="0.016592"/>
</kw>
<msg time="2026-08-15T23:47:00.564258" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:00.530753" elapsed="0.033562"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.577303" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.590223" elapsed="0.000048"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.603186" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.603384" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.603561" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.604110" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.603895" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:00.603879" elapsed="0.000450"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.604514" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.604856" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.605209" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:00.603846" elapsed="0.001562"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.603688" elapsed="0.001749"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.605583" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.605660" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:00.605786" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:00.526189" elapsed="0.079643"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:00.607475" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.607073" elapsed="0.000598">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:00.607913" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:00.606539" elapsed="0.001401"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.608265" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.608014" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.609164" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:00.608606" elapsed="0.000599"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.608430" elapsed="0.000883"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.607994" elapsed="0.001344"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.616133" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:00.609491" elapsed="0.006670"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:00.616214" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:00.616374" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:00.606191" elapsed="0.010209"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:00.618000" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.617612" elapsed="0.000572">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:00.618412" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:00.617104" elapsed="0.001339"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:00.618663" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:00.618522" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.618503" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.618919" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.619088" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.619190" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:47:00.621254" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:00.616733" elapsed="0.004549"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.622972" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.622496" elapsed="0.000525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.623625" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.623172" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:00.728254" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:00.728839" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:00.729311" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.626010" elapsed="0.104425">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:00.623740" elapsed="0.107209">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.731437" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.731039" elapsed="0.000833"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:00.623721" elapsed="0.108217">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.733083" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.733408" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:00.733316" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:00.733272" elapsed="0.000281"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.733954" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.734116" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.621642" elapsed="0.112748">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.734565" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.501170" elapsed="0.233618">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.735538" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.735124" elapsed="0.000577"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:00.734999" elapsed="0.000758"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.735907" elapsed="0.000038"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.491002" elapsed="0.245141">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:47:00.736460" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.155744" elapsed="32.580929">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:46:28.135623" elapsed="32.601353">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.747193" elapsed="0.000029"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.747551" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.747737" elapsed="0.000022"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:47:00.747358" elapsed="0.000459"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.747285" elapsed="0.000561"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:47:00.749292" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:47:00.749011" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.749955" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.749482" elapsed="0.000501"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:00.768723" elapsed="0.000883"/>
</kw>
<msg time="2026-08-15T23:47:00.769854" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:00.768359" elapsed="0.001566"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:00.767940" elapsed="0.002064"/>
</kw>
<msg time="2026-08-15T23:47:00.770046" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:00.759058" elapsed="0.011046"/>
</kw>
<msg time="2026-08-15T23:47:00.770206" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:00.758691" elapsed="0.011540"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.815598" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:00.814852" elapsed="0.000866"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:00.817675" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:00.817062" elapsed="0.000778">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:00.817978" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:00.816109" elapsed="0.001976"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.819587" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:00.818441" elapsed="0.001257"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:00.820439" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:00.820671" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:00.820220" elapsed="0.000567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.821606" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.821105" elapsed="0.000565"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.823752" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.823478" elapsed="0.000404"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.824371" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.824098" elapsed="0.000299"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.825192" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:00.824872" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:00.826081" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.825766" elapsed="0.000343"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:00.826162" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:00.826320" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:00.825406" elapsed="0.000941"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.826520" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:00.824712" elapsed="0.002117"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.827417" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:00.827083" elapsed="0.000361"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:00.828235" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.828017" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:00.828317" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:47:00.828490" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:00.827629" elapsed="0.000887"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.828673" elapsed="0.000261"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:00.826949" elapsed="0.002027"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:00.824495" elapsed="0.004537"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:00.829099" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:47:00.829476" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:00.822651" elapsed="0.006916"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.821931" elapsed="0.007713"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.829988" elapsed="0.000086"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.829726" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.821907" elapsed="0.008328"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.831623" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:00.830385" elapsed="0.001354"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:00.832008" elapsed="0.000034"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:00.813790" elapsed="0.018375"/>
</kw>
<msg time="2026-08-15T23:47:00.832262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:00.800547" elapsed="0.031786"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.845347" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.859117" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.871616" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.871823" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.871999" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.872419" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.872272" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:00.872256" elapsed="0.000245"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.872637" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.872824" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.872990" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:00.872223" elapsed="0.000820"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.872078" 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-08-15T23:47:00.873214" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:00.873291" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:47:00.873420" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:00.795957" elapsed="0.077490"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.874603" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.874330" elapsed="0.000320"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:00.889683" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:00.889826" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:00.889960" 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-08-15T23:47:00.876821" elapsed="0.013176"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.874717" elapsed="0.015336"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.890303" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.890091" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.874699" elapsed="0.015721"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.896019" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.892178" elapsed="0.003908"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.891835" elapsed="0.004300"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.891781" elapsed="0.004391"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.901393" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:00.896599" elapsed="0.004880"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.896252" elapsed="0.005290"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.896228" elapsed="0.005359"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.902665" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:00.901930" elapsed="0.000785"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.903323" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.902886" elapsed="0.000590"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.904263" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:00.903735" elapsed="0.000561"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.903517" elapsed="0.000824"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.902847" elapsed="0.001522"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.905053" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:00.904573" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:00.905467" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:00.905172" elapsed="0.000366"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:00.906320" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:00.905770" elapsed="0.000579"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:00.905570" elapsed="0.000816"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:00.905149" elapsed="0.001259"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:00.906607" elapsed="0.000633"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:47:00.907859" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:00.907440" elapsed="0.000448"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-08-15T23:47:00.908046" elapsed="0.005975"/>
</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-08-15T23:47:00.891173" elapsed="0.022918"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:47:00.914140" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:47:00.916527" 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-08-15T23:47:00.873706" elapsed="0.042850"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:47:00.916612" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:47:00.770462" elapsed="0.146279"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:47:00.748530" elapsed="0.168299"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:47:00.748048" elapsed="0.168841"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:46:27.755565" elapsed="33.161417">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:46:27.755182" elapsed="33.161914">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:46:27.754845" elapsed="33.162319">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:46:27.754292" elapsed="33.162970">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.922012" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:01.921222" elapsed="0.000860"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:47:01.922200" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:47:01.922556" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:47:01.920370" elapsed="0.002244"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:01.948596" elapsed="0.000905"/>
</kw>
<msg time="2026-08-15T23:47:01.949647" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:01.948128" elapsed="0.001587"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:01.947725" elapsed="0.002070"/>
</kw>
<msg time="2026-08-15T23:47:01.949865" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:01.938598" elapsed="0.011317"/>
</kw>
<msg time="2026-08-15T23:47:01.950021" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:01.938228" elapsed="0.011818"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.950962" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.950212" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:01.951499" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:01.951099" elapsed="0.000470"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.986287" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:01.985897" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:01.987140" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:01.986879" elapsed="0.000338">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:01.987337" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:01.986528" elapsed="0.000838"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.987998" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:01.987579" elapsed="0.000447"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:01.988447" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:01.988606" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:01.988303" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.989156" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:01.988896" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.990242" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:01.989979" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.990715" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.990450" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.991453" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:01.991129" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:01.992226" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.992005" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:01.992304" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:47:01.992469" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:01.991666" elapsed="0.000829"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.992644" elapsed="0.000261"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:47:01.990996" elapsed="0.001950"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.993489" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:01.993190" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:01.994239" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.994030" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:01.994315" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:01.994465" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:01.993696" elapsed="0.000794"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.994642" elapsed="0.000239"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:01.993060" elapsed="0.001862"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.995495" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:01.995162" elapsed="0.000360"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:01.996242" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.996032" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:01.996337" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:01.996488" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:01.995703" elapsed="0.000809"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.996658" elapsed="0.000420"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:47:01.995033" elapsed="0.002086"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.997661" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:01.997362" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:01.998409" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.998194" elapsed="0.000241"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:01.998484" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:01.998634" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:01.997883" elapsed="0.000775"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:01.998861" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:47:01.997232" elapsed="0.001895"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:01.999704" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:01.999403" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:02.000446" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.000238" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:02.000521" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:02.000671" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:01.999926" elapsed="0.000769"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.000857" elapsed="0.000228"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:47:01.999240" elapsed="0.001891"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.001667" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:02.001373" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:02.002405" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.002197" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:02.002486" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:02.002634" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:02.001887" elapsed="0.000772"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.002819" elapsed="0.000222"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:47:02.001245" elapsed="0.001836"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.003655" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:02.003357" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:02.004400" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.004186" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:02.004475" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:02.004623" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:02.003876" elapsed="0.000772"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.004794" elapsed="0.000237"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:47:02.003193" elapsed="0.001878"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.005614" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:02.005312" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:02.006368" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.006155" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:02.006444" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:02.006593" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:02.005837" elapsed="0.000781"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.006765" elapsed="0.000238"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:02.005184" elapsed="0.001859"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:01.990792" elapsed="0.016287"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:02.007122" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:47:02.007297" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:01.989632" elapsed="0.017692"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:01.989326" elapsed="0.018031"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.007535" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.007388" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:01.989301" elapsed="0.018350"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.008748" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:02.007872" elapsed="0.000904"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:02.008892" elapsed="0.000053"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:01.984904" elapsed="0.024270"/>
</kw>
<msg time="2026-08-15T23:47:02.009265" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:01.970134" elapsed="0.039228"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.032016" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.054661" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.080707" 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-08-15T23:47:02.080997" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.081196" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.081784" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.081518" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:02.081501" elapsed="0.000472"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.082176" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.082501" elapsed="0.000044"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.082846" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:02.081466" elapsed="0.001547"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.081324" elapsed="0.001751"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.083225" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.083429" elapsed="0.000021"/>
</return>
<msg time="2026-08-15T23:47:02.083573" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:01.965659" elapsed="0.117941"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.111972" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.111563" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.112828" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.112548" elapsed="0.000360">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:02.113003" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:02.112211" elapsed="0.000816"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.113628" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:02.113237" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.114029" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:02.114183" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:02.113884" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.114658" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.114412" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:47:02.115147" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.114844" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.115725" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.115421" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.115230" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.114822" elapsed="0.001011"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.116733" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:02.116030" elapsed="0.000734"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:02.116902" elapsed="0.000056"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:02.110542" elapsed="0.006639"/>
</kw>
<msg time="2026-08-15T23:47:02.117271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:02.096911" elapsed="0.020455"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.140007" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.162445" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.184792" elapsed="0.000047"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.185069" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.185264" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.185876" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.185590" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:02.185574" elapsed="0.000476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.186251" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.186583" elapsed="0.000044"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.186935" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:02.185539" elapsed="0.001566"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.185399" elapsed="0.001767"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.187316" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.187500" elapsed="0.000022"/>
</return>
<msg time="2026-08-15T23:47:02.187648" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:02.094001" elapsed="0.093679"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.190419" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.189763" elapsed="0.000788">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:02.190682" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:02.188452" elapsed="0.002255"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.191187" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.190832" elapsed="0.000511"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.192599" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.191955" elapsed="0.000686"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.191371" elapsed="0.001350"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.190811" elapsed="0.001934"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.195642" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:02.192910" elapsed="0.002759"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:02.195879" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:47:02.196045" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:02.188094" elapsed="0.007977"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.197911" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.197399" elapsed="0.000577"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.198604" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.198140" elapsed="0.000533"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.199320" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.198850" elapsed="0.000533"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.200048" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.199555" elapsed="0.000554"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:47:02.201601" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:47:02.201029" elapsed="0.000669"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:47:02.202506" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:47:02.201982" elapsed="0.000624"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.202936" elapsed="0.000524"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.204522" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.203726" elapsed="0.000990"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:47:02.204818" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:02.205091" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:47:02.200323" elapsed="0.004795"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:02.225699" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:47:02.225845" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:02.226051" 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-08-15T23:47:02.213524" elapsed="0.012584"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.205226" elapsed="0.021047"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.226571" elapsed="0.000103"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.226314" elapsed="0.000568"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.205207" elapsed="0.021710"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.232916" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.229339" elapsed="0.003668"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.228668" elapsed="0.004405"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.228622" elapsed="0.004547"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.237083" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.233951" elapsed="0.003201"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.233289" elapsed="0.003910"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.233247" elapsed="0.004020"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.238793" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:02.237760" elapsed="0.001152"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.239582" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.239077" elapsed="0.000600"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.240597" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.240144" elapsed="0.000489"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.239746" elapsed="0.000935"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.239043" elapsed="0.001703"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.242311" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:02.241251" elapsed="0.001160"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.243033" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.242538" elapsed="0.000590"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.244130" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.243574" elapsed="0.000592"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.243196" elapsed="0.001019"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.242506" elapsed="0.001774"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:02.244526" elapsed="0.000820"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:47:02.246337" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:02.245615" elapsed="0.000820"/>
</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-08-15T23:47:02.246696" elapsed="0.002733"/>
</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-08-15T23:47:02.227594" elapsed="0.021942"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:47:02.249765" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:47:02.249619" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.249599" elapsed="0.000370"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.250118" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.250225" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:02.252580" 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-08-15T23:47:02.196478" elapsed="0.056129"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:47:02.252673" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:02.252843" 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-08-15T23:47:01.954554" elapsed="0.298315"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.253203" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.252968" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.252950" elapsed="0.000345"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:47:02.253328" elapsed="0.000026"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:47:01.951864" elapsed="0.301585"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:01.951596" elapsed="0.301895"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:01.951076" elapsed="0.302438"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.253654" elapsed="0.000259"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:47:01.924264" elapsed="0.329713"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:47:01.922957" elapsed="0.331128"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.254704" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.254246" elapsed="0.000486"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:02.274739" elapsed="0.000827"/>
</kw>
<msg time="2026-08-15T23:47:02.275618" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:02.274380" elapsed="0.001292"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:02.273992" elapsed="0.001755"/>
</kw>
<msg time="2026-08-15T23:47:02.275790" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:02.265230" elapsed="0.010628"/>
</kw>
<msg time="2026-08-15T23:47:02.275961" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:02.264904" elapsed="0.011081"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.324635" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.324051" elapsed="0.000632"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.325716" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.325479" elapsed="0.000308">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:02.326008" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:02.325040" elapsed="0.001013"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.327114" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:02.326396" elapsed="0.000765"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.327753" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:02.328019" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:02.327507" elapsed="0.000558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.328740" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.328387" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.330183" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.329749" elapsed="0.000480"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.330652" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.330386" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.331416" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:02.331117" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:02.332207" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.331989" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:02.332322" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:47:02.332480" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:02.331656" elapsed="0.000850"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.332654" elapsed="0.000259"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:02.330985" elapsed="0.001970"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.333495" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:02.333198" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:02.334247" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.334038" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:02.334323" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:02.334473" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:02.333702" elapsed="0.000795"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:02.334643" elapsed="0.000237"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:02.333068" elapsed="0.001853"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:02.330729" elapsed="0.004227"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:02.335000" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:47:02.335154" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:02.329427" elapsed="0.005753"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.329041" elapsed="0.006196"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.335520" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.335296" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.328999" elapsed="0.006660"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.336744" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:02.335977" elapsed="0.000814"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:02.336941" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:02.322438" elapsed="0.014733"/>
</kw>
<msg time="2026-08-15T23:47:02.337346" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:02.308273" elapsed="0.029128"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.350264" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.363056" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.375988" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.376231" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.376408" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.376912" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.376676" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:02.376660" elapsed="0.000478"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.377317" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.377634" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.378009" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:02.376627" elapsed="0.001581"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.376485" elapsed="0.001752"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.378389" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.378465" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:02.378594" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:02.303970" elapsed="0.074651"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.380290" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.379887" elapsed="0.000604">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:02.380671" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:02.379338" elapsed="0.001359"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.381085" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.380769" elapsed="0.000465"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.382214" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:02.381431" elapsed="0.000825"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:02.381262" elapsed="0.001106"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.380750" elapsed="0.001643"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.389034" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:02.382547" elapsed="0.006514"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:02.389114" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:02.389273" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:02.379001" elapsed="0.010297"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:02.390899" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.390506" elapsed="0.000582">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:02.391270" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:02.390006" elapsed="0.001290"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:02.391505" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-08-15T23:47:02.391369" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:02.391350" elapsed="0.000308"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.391878" elapsed="0.000024"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.392053" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.392120" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:02.394100" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:02.389636" elapsed="0.004490"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.395861" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.395366" elapsed="0.000545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:02.396514" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:02.396061" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:02.411991" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:02.412260" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:02.412476" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.398878" elapsed="0.014172">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:02.396626" elapsed="0.016628">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.413463" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.413293" elapsed="0.000343"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:02.396607" elapsed="0.017058">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.414182" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.414326" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:02.414286" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:02.414267" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.414537" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.414610" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.394489" elapsed="0.020234">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.414848" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.281182" elapsed="0.133782">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:02.415247" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:02.415061" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:02.415043" elapsed="0.000347"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:02.415425" elapsed="0.000016"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.276743" elapsed="0.138787">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.473727" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:05.473000" elapsed="0.000784"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:05.475004" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.474690" elapsed="0.000392">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:05.475287" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:05.474165" elapsed="0.001172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.476557" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:05.475746" elapsed="0.000863"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:05.477239" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:05.477693" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:05.476978" elapsed="0.000767"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.478514" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:05.478143" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.479989" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:05.479677" elapsed="0.000374"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.480520" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:05.480231" elapsed="0.000316"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.481357" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:05.481032" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:05.482281" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:05.482050" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:05.482364" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:05.482532" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:05.481620" 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-08-15T23:47:05.482711" elapsed="0.000402"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:05.480890" elapsed="0.002268"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.483717" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:05.483411" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:05.484702" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:05.484488" elapsed="0.000241"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:05.484780" elapsed="0.000048"/>
</return>
<msg time="2026-08-15T23:47:05.485049" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:05.483993" elapsed="0.001084"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:05.485232" elapsed="0.000231"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:05.483277" elapsed="0.002250"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:05.480604" elapsed="0.004961"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:05.485613" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:05.485782" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:05.479274" elapsed="0.006552"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:05.478853" elapsed="0.007037"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.486223" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:05.485993" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:05.478784" elapsed="0.007579"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.487566" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:05.486669" elapsed="0.000946"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:05.487752" elapsed="0.000095"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:05.471232" elapsed="0.016794"/>
</kw>
<msg time="2026-08-15T23:47:05.488240" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:05.455970" elapsed="0.032334"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.501607" elapsed="0.000041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.514848" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.528057" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.528261" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.528436" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.529003" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:05.528707" elapsed="0.000449"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:05.528691" elapsed="0.000545"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.529415" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.529836" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.530256" elapsed="0.000024"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:05.528658" elapsed="0.001801"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.528517" elapsed="0.001974"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.530641" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.530721" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:05.530873" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:05.451353" elapsed="0.079548"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:05.532686" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.532266" elapsed="0.000684">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:05.533187" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:05.531663" elapsed="0.001553"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.533569" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:05.533292" elapsed="0.000416"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.534542" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:05.533974" elapsed="0.000609"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:05.533737" elapsed="0.000956"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:05.533272" elapsed="0.001446"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.541892" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:05.534916" elapsed="0.007005"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:05.541976" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:05.542136" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:05.531319" elapsed="0.010842"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:05.543850" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.543397" elapsed="0.000641">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:05.544222" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:05.542891" elapsed="0.001357"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:05.544462" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:05.544322" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:05.544302" elapsed="0.000244"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.544740" elapsed="0.000028"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.545040" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.545109" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:05.547188" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:05.542500" elapsed="0.004716"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.549065" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:05.548528" elapsed="0.000586"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:05.549747" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:05.549268" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:05.638529" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:05.639119" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:05.639542" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.552227" elapsed="0.088267">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:05.549923" elapsed="0.091059">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.641454" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:05.641079" elapsed="0.000820"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:05.549888" elapsed="0.092079">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.643082" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.643390" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:05.643304" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:05.643266" elapsed="0.000264"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.643968" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.644129" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.547581" elapsed="0.096789">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.644537" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.427466" elapsed="0.217289">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:05.645435" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:05.645030" elapsed="0.000636"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:05.644992" elapsed="0.000734"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:05.645798" elapsed="0.000074"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:05.416604" elapsed="0.229468">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.704313" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:08.703664" elapsed="0.000705"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:08.705485" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.705204" elapsed="0.000359">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:08.705764" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:08.704722" elapsed="0.001103"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.706784" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:08.706175" elapsed="0.000678"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:08.707491" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:08.707756" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:08.707228" elapsed="0.000602"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.708539" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:08.708173" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.709931" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:08.709648" elapsed="0.000330"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.710415" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:08.710138" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.711169" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:08.710828" elapsed="0.000370"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:08.711975" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:08.711711" elapsed="0.000292"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:08.712058" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:47:08.712224" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:08.711389" elapsed="0.000867"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:08.712425" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:08.710677" elapsed="0.002037"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.713377" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:08.713074" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:08.714294" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:08.714079" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:08.714373" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:08.714526" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:08.713594" elapsed="0.000958"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:08.714703" elapsed="0.000242"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:08.712941" elapsed="0.002046"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:08.710496" elapsed="0.004526"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:08.715066" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:08.715264" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:08.709315" elapsed="0.005978"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:08.708897" elapsed="0.006457"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.715627" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:08.715415" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:08.708755" elapsed="0.007078"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.717026" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:08.716145" elapsed="0.000930"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:08.717206" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:08.702002" elapsed="0.015438"/>
</kw>
<msg time="2026-08-15T23:47:08.717609" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:08.687302" elapsed="0.030363"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.730427" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.744173" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.756663" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.756877" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.757051" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.757519" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:08.757308" elapsed="0.000353"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:08.757292" elapsed="0.000446"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.757930" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.758242" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.758587" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:08.757261" elapsed="0.001522"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.757127" elapsed="0.001699"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.758974" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.759050" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:08.759249" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:08.682852" elapsed="0.076468"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:08.760971" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.760563" elapsed="0.000600">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:08.761343" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:08.760059" elapsed="0.001310"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.761694" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:08.761441" elapsed="0.000405"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.762546" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:08.762051" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:08.761876" elapsed="0.000819"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:08.761422" elapsed="0.001299"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.769298" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:08.762886" elapsed="0.006440"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:08.769379" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:08.769535" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:08.759697" elapsed="0.009863"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:08.771099" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.770716" elapsed="0.000600">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:08.771498" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:08.770227" elapsed="0.001296"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:08.771730" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:08.771594" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:08.771575" elapsed="0.000267"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.771987" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.772152" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.772216" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:08.774325" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:08.769904" elapsed="0.004448"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.776038" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:08.775551" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:08.776688" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:08.776234" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:08.868912" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:08.869470" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:08.870052" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.779127" elapsed="0.091903">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:08.776907" elapsed="0.094663">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.872105" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:08.871663" elapsed="0.000842"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:08.776782" elapsed="0.095788">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.873765" elapsed="0.000123"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.874151" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:08.874058" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:08.874018" elapsed="0.000283"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.874630" elapsed="0.000053"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.874795" elapsed="0.000078"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.774706" elapsed="0.100388">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.875300" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.657574" elapsed="0.217962">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:08.876209" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:08.875748" elapsed="0.000629"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:08.875709" elapsed="0.000726"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:08.876510" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:08.647261" elapsed="0.229485">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.933276" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:11.932632" elapsed="0.000698"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:11.934419" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:11.934154" elapsed="0.000342">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:11.934689" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:11.933681" elapsed="0.001053"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.935720" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:11.935098" elapsed="0.000670"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:11.936550" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:11.936869" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:11.936301" elapsed="0.000615"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.937610" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:11.937245" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.938968" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:11.938649" elapsed="0.000365"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.939442" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:11.939173" elapsed="0.000295"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.940171" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:11.939869" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:11.941075" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:11.940712" elapsed="0.000390"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:11.941154" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:47:11.941321" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:11.940383" elapsed="0.000969"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:11.941509" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:11.939699" elapsed="0.002116"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.942373" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:11.942074" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:11.943289" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:11.943076" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:11.943371" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:11.943525" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:11.942721" elapsed="0.000829"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:11.943697" elapsed="0.000249"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:11.941936" elapsed="0.002051"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:11.939523" elapsed="0.004500"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:11.944066" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:11.944225" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:11.938324" elapsed="0.005927"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:11.937923" elapsed="0.006387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.944589" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:11.944371" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:11.937875" elapsed="0.006848"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.945923" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:11.945093" elapsed="0.000880"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:11.946104" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:11.931067" elapsed="0.015275"/>
</kw>
<msg time="2026-08-15T23:47:11.946510" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:11.915349" elapsed="0.031216"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.959481" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.972214" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.984963" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.985159" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.985329" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.985824" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:11.985594" elapsed="0.000376"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:11.985578" elapsed="0.000471"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.986227" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.986555" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.986931" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:11.985547" elapsed="0.001580"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:11.985412" elapsed="0.001745"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.987304" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:11.987379" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:11.987508" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:11.911038" elapsed="0.076498"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:11.989228" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:11.988766" elapsed="0.000654">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:11.989611" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:11.988246" elapsed="0.001391"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:11.990073" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:11.989710" elapsed="0.000504"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.990967" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:11.990423" elapsed="0.000586"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:11.990242" elapsed="0.000874"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:11.989691" elapsed="0.001449"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:11.997895" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:11.991294" elapsed="0.006629"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:11.997977" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:11.998132" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:11.987913" elapsed="0.010244"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:11.999703" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:11.999338" elapsed="0.000566">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:12.000082" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:11.998853" elapsed="0.001255"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:12.000317" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:47:12.000180" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:12.000161" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:12.000544" elapsed="0.000030"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:12.000719" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:12.000784" elapsed="0.000067"/>
</return>
<msg time="2026-08-15T23:47:12.002865" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:11.998480" elapsed="0.004413"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:12.004540" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:12.004081" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:12.005254" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:12.004739" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:12.100301" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:12.100910" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:12.101336" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:12.007740" elapsed="0.094548">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:12.005368" elapsed="0.097357">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:12.103252" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:12.102864" elapsed="0.000774"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:12.005350" elapsed="0.098351">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:12.104971" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:12.105287" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:12.105198" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:12.105159" elapsed="0.000270"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:12.105842" elapsed="0.000053"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:12.106007" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:12.003249" elapsed="0.103000">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:12.106423" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:11.886213" elapsed="0.220431">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:12.107320" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:12.106919" elapsed="0.000564"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:12.106877" elapsed="0.000660"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:12.107610" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:11.877863" elapsed="0.230012">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.164763" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:15.164157" elapsed="0.000682"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:15.165938" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.165644" elapsed="0.000370">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:15.166214" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:15.165195" elapsed="0.001064"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.167373" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:15.166742" elapsed="0.000681"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:15.168049" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:15.168313" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:15.167770" elapsed="0.000590"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.169221" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:15.168694" elapsed="0.000624"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.170568" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:15.170263" elapsed="0.000351"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.171165" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:15.170890" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.171866" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:15.171553" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:15.172618" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:15.172392" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:15.172697" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:47:15.172885" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:15.172076" elapsed="0.000834"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:15.173060" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:15.171421" elapsed="0.001920"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.173917" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:15.173584" elapsed="0.000360"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:15.174823" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:15.174596" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:15.174902" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:15.175052" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:15.174123" elapsed="0.000955"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:15.175226" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:15.173455" elapsed="0.002030"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:15.171245" elapsed="0.004275"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:15.175565" elapsed="0.000026"/>
</return>
<msg time="2026-08-15T23:47:15.175718" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:15.169896" elapsed="0.005847"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:15.169476" elapsed="0.006348"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.176098" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:15.175888" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:15.169430" elapsed="0.006801"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.177333" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:15.176529" elapsed="0.000852"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:15.177514" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:15.162545" elapsed="0.015201"/>
</kw>
<msg time="2026-08-15T23:47:15.177932" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:15.148035" elapsed="0.029951"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.190724" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.203370" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.216023" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.216217" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.216390" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.216874" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:15.216644" elapsed="0.000374"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:15.216628" elapsed="0.000465"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.217268" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.217578" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.217944" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:15.216598" elapsed="0.001543"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.216466" elapsed="0.001704"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.218315" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.218391" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:15.218537" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:15.143744" elapsed="0.074820"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:15.220160" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.219755" elapsed="0.000595">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:15.220531" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:15.219261" elapsed="0.001296"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.220897" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:15.220628" elapsed="0.000408"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.221726" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:15.221237" elapsed="0.000531"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:15.221064" elapsed="0.000898"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:15.220609" elapsed="0.001379"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.228622" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:15.222139" elapsed="0.006511"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:15.228703" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:15.228995" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:15.218939" elapsed="0.010082"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:15.230633" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.230224" elapsed="0.000659">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:15.231066" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:15.229713" elapsed="0.001379"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:15.231302" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:15.231165" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:15.231146" elapsed="0.000240"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.231529" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.231701" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.231767" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:15.233973" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:15.229389" elapsed="0.004612"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.235696" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:15.235236" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:15.236513" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:15.236034" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:15.331350" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:15.331936" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:15.332414" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.238899" elapsed="0.094470">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:15.236636" elapsed="0.097281">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.334409" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:15.334017" elapsed="0.000905"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:15.236617" elapsed="0.098373">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.336109" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.336418" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:15.336332" elapsed="0.000180"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:15.336292" elapsed="0.000270"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.336919" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.337075" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.234358" elapsed="0.102957">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.337589" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.120291" elapsed="0.217569">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:15.338458" elapsed="0.000115"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:15.338066" elapsed="0.000625"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:15.338030" elapsed="0.000718"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:15.338860" elapsed="0.000037"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:15.109185" elapsed="0.229907">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.398858" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:18.398214" elapsed="0.000700"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:18.400029" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.399717" elapsed="0.000419">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:18.400342" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:18.399265" elapsed="0.001124"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.401469" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:18.400736" elapsed="0.000782"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:18.402132" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:18.402399" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:18.401878" elapsed="0.000569"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.403194" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:18.402782" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.404509" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:18.404247" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.405016" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:18.404712" elapsed="0.000330"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.405722" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:18.405417" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:18.406586" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:18.406359" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:18.406664" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:47:18.406846" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:18.406035" elapsed="0.000838"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:18.407091" elapsed="0.000248"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:18.405280" elapsed="0.002101"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.407951" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:18.407630" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:18.408728" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:18.408508" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:18.408825" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:18.408978" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:18.408194" elapsed="0.000809"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:18.409150" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:18.407498" elapsed="0.001911"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:18.405098" elapsed="0.004347"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:18.409489" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:47:18.409643" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:18.403874" elapsed="0.005795"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:18.403445" elapsed="0.006281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.410159" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:18.409786" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:18.403400" elapsed="0.006900"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.411580" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:18.410601" elapsed="0.001028"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:18.411762" elapsed="0.000098"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:18.396588" elapsed="0.015434"/>
</kw>
<msg time="2026-08-15T23:47:18.412223" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:18.382021" elapsed="0.030258"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.425290" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.438280" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.451095" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.451339" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.451514" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.452016" elapsed="0.000111"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:18.451780" elapsed="0.000435"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:18.451763" elapsed="0.000535"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.452481" elapsed="0.000025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.452824" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.453187" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:18.451731" elapsed="0.001662"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.451591" elapsed="0.001833"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.453573" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.453649" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:18.453771" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:18.377476" elapsed="0.076341"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:18.455489" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.455039" elapsed="0.000655">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:18.455938" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:18.454509" elapsed="0.001514"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.456368" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:18.456119" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.457271" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:18.456716" elapsed="0.000596"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:18.456535" elapsed="0.000886"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:18.456098" elapsed="0.001348"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.464234" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:18.457601" elapsed="0.006661"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:18.464316" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:18.464474" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:18.454183" elapsed="0.010316"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:18.466130" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.465671" elapsed="0.000646">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:18.466498" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:18.465175" elapsed="0.001348"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:18.466733" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:18.466595" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:18.466576" elapsed="0.000258"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.467019" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.467188" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.467255" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:18.470517" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:18.464847" elapsed="0.005731"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.473579" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:18.473115" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:18.474258" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:18.473777" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:18.581794" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:18.582424" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:18.582928" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.476643" elapsed="0.107323">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:18.474373" elapsed="0.110113">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.584937" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:18.584581" elapsed="0.000615"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:18.474354" elapsed="0.110882">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.586020" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.586223" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:18.586165" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:18.586139" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.586518" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.586616" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.471462" elapsed="0.115315">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.586930" elapsed="0.000025"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.350116" elapsed="0.236964">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:18.587470" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:18.587213" elapsed="0.000436"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:18.587187" elapsed="0.000500"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:18.587734" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:18.340267" elapsed="0.247673">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.646717" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:21.646080" elapsed="0.000694"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:21.647945" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.647629" elapsed="0.000402">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:21.648235" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:21.647166" elapsed="0.001115"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.649262" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:21.648624" elapsed="0.000687"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:21.650128" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:21.650503" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:21.649659" elapsed="0.000891"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.651279" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:21.650912" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.652609" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:21.652350" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.653105" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:21.652831" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.653870" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:21.653501" elapsed="0.000396"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:21.654643" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:21.654415" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:21.654727" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:47:21.654966" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:21.654083" elapsed="0.000910"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:21.655145" elapsed="0.000248"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:21.653366" elapsed="0.002066"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.656007" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:21.655681" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:21.656750" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:21.656531" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:21.656843" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:21.656996" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:21.656213" elapsed="0.000808"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:21.657168" elapsed="0.000283"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:21.655550" elapsed="0.001943"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:21.653186" elapsed="0.004344"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:21.657575" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:21.657757" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:21.652018" elapsed="0.005769"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:21.651539" elapsed="0.006328"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.658145" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:21.657932" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:21.651492" elapsed="0.006790"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.659595" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:21.658587" elapsed="0.001058"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:21.659778" elapsed="0.000095"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:21.644365" elapsed="0.015675"/>
</kw>
<msg time="2026-08-15T23:47:21.660210" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:21.629247" elapsed="0.031017"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.673347" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.686051" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.698647" elapsed="0.000038"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.698994" 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-08-15T23:47:21.699238" elapsed="0.000029"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.699937" elapsed="0.000135"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:21.699604" elapsed="0.000580"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:21.699583" elapsed="0.000710"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.700540" elapsed="0.000031"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.701000" elapsed="0.000030"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.701483" elapsed="0.000091"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:21.699539" elapsed="0.002344"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.699346" elapsed="0.002581"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.702134" elapsed="0.000030"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.702243" elapsed="0.000023"/>
</return>
<msg time="2026-08-15T23:47:21.702421" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:21.624927" elapsed="0.077532"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:21.704260" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.703855" elapsed="0.000600">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:21.704636" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:21.703308" elapsed="0.001354"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.705065" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:21.704733" elapsed="0.000469"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.705948" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:21.705406" elapsed="0.000582"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:21.705229" elapsed="0.000866"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:21.704715" elapsed="0.001404"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.712640" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:21.706268" elapsed="0.006400"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:21.712720" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:21.712935" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:21.702970" elapsed="0.009991"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:21.714533" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.714166" elapsed="0.000548">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:21.714922" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:21.713610" elapsed="0.001338"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:21.715155" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:47:21.715019" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:21.715000" elapsed="0.000238"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.715380" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.715546" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.715611" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:21.717878" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:21.713288" elapsed="0.004617"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.719559" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:21.719100" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:21.720224" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:21.719757" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:21.822458" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:21.823086" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:21.823497" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.722615" elapsed="0.101836">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:21.720374" elapsed="0.104553">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.825376" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:21.825015" elapsed="0.000743"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:21.720355" elapsed="0.105547">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.827084" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.827396" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:21.827309" elapsed="0.000181"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:21.827270" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.827924" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.828086" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.718268" elapsed="0.110066">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.828503" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.597693" elapsed="0.231029">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:21.829368" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:21.828971" elapsed="0.000557"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:21.828931" elapsed="0.000650"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:21.829651" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:21.589055" elapsed="0.240906">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.885035" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:24.884410" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:24.886243" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.885979" elapsed="0.000343">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:24.886521" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:24.885508" elapsed="0.001059"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.887562" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:24.886930" elapsed="0.000681"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:24.888329" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:24.888579" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:24.888079" elapsed="0.000545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.889388" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:24.889002" elapsed="0.000495"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.890785" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:24.890489" elapsed="0.000374"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.891296" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:24.891024" elapsed="0.000299"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.892086" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:24.891708" elapsed="0.000405"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:24.892858" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:24.892617" elapsed="0.000268"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:24.892937" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:47:24.893101" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:24.892298" elapsed="0.000828"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:24.893277" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:24.891572" elapsed="0.001987"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.894166" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:24.893856" elapsed="0.000336"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:24.894957" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:24.894693" elapsed="0.000291"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:24.895034" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:24.895184" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:24.894373" 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-08-15T23:47:24.895379" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:24.893674" elapsed="0.001970"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:24.891391" elapsed="0.004288"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:24.895723" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:24.895903" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:24.890160" elapsed="0.005769"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:24.889657" elapsed="0.006331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.896257" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:24.896048" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:24.889610" elapsed="0.006780"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.897670" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:24.896690" elapsed="0.001061"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:24.897902" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:24.882842" elapsed="0.015294"/>
</kw>
<msg time="2026-08-15T23:47:24.898304" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:24.868309" elapsed="0.030050"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.911257" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.924043" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.937188" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.937389" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.937564" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.938069" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:24.937850" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:24.937832" elapsed="0.000459"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.938469" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.938781" elapsed="0.000042"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.939174" elapsed="0.000025"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:24.937781" elapsed="0.001616"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:24.937643" elapsed="0.001788"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.939580" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:24.939663" elapsed="0.000023"/>
</return>
<msg time="2026-08-15T23:47:24.939823" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:24.863992" elapsed="0.075860"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:24.941542" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.941147" elapsed="0.000590">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:24.941977" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:24.940589" elapsed="0.001415"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.942326" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:24.942075" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.943223" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:24.942669" elapsed="0.000595"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:24.942492" elapsed="0.000904"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:24.942057" elapsed="0.001366"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.950099" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:24.943577" elapsed="0.006557"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:24.950192" elapsed="0.000040"/>
</return>
<msg time="2026-08-15T23:47:24.950390" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:24.940259" elapsed="0.010165"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:24.952072" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.951679" elapsed="0.000579">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:24.952439" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:24.951151" elapsed="0.001314"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:24.952683" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:47:24.952540" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:24.952520" elapsed="0.000249"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.952970" elapsed="0.000027"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:24.953150" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:24.953216" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:24.955522" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:24.950785" elapsed="0.004765"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.957291" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:24.956791" elapsed="0.000549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:24.958030" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:24.957493" elapsed="0.000586"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:25.062483" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:25.063106" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:25.063590" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.960454" elapsed="0.104121">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:24.958149" elapsed="0.107039">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:25.065681" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:25.065279" elapsed="0.000858"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:24.958130" elapsed="0.108076">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:25.067513" elapsed="0.000071"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:25.067870" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:25.067759" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:25.067727" elapsed="0.000249"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:25.068194" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:25.068299" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.955961" elapsed="0.112502">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:25.068578" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.840582" elapsed="0.228163">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:25.069269" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:25.068974" elapsed="0.000443"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:25.068943" elapsed="0.000514"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:25.069508" elapsed="0.000023"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:24.831077" elapsed="0.238586">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.127889" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:28.127104" elapsed="0.000871"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:28.129389" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.129053" elapsed="0.000431">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:28.129716" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:28.128389" elapsed="0.001377"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.131072" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:28.130272" elapsed="0.000863"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:28.131769" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:28.132155" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:28.131506" elapsed="0.000696"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.132958" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:28.132566" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.134417" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:28.134149" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.134971" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:28.134625" elapsed="0.000373"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.135684" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:28.135371" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:28.136504" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:28.136266" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:28.136587" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:47:28.136757" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:28.135935" elapsed="0.000848"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:28.136957" elapsed="0.000284"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:28.135235" elapsed="0.002056"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.137874" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:28.137547" elapsed="0.000354"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:28.138619" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:28.138403" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:28.138695" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:28.138866" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:28.138084" elapsed="0.000808"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:28.139042" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:28.137413" elapsed="0.001893"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:28.135054" elapsed="0.004287"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:28.139385" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:28.139543" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:28.133719" elapsed="0.005850"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:28.133254" elapsed="0.006375"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.139923" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:28.139690" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:28.133207" elapsed="0.006854"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.141257" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:28.140379" elapsed="0.000927"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:28.141441" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:28.124852" elapsed="0.016831"/>
</kw>
<msg time="2026-08-15T23:47:28.141884" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:28.109525" elapsed="0.032421"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.156461" elapsed="0.000079"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.169709" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.182626" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.182880" 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-08-15T23:47:28.183067" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.183618" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:28.183388" elapsed="0.000380"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:28.183369" elapsed="0.000509"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.184065" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.184395" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.184755" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:28.183321" elapsed="0.001655"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.183154" elapsed="0.001855"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.185237" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.185329" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:47:28.185485" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:28.104829" elapsed="0.080685"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:28.187489" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.186942" elapsed="0.000751">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:28.187906" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:28.186323" elapsed="0.001610"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.188306" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:28.188006" elapsed="0.000509"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.189360" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:28.188728" elapsed="0.000676"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:28.188546" elapsed="0.000966"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:28.187987" elapsed="0.001551"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.198613" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:28.189692" elapsed="0.008953"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:28.198704" elapsed="0.000041"/>
</return>
<msg time="2026-08-15T23:47:28.198903" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:28.185950" elapsed="0.012979"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:28.200640" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.200218" elapsed="0.000641">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:28.201063" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:28.199667" elapsed="0.001424"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:28.201317" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:28.201169" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:28.201149" elapsed="0.000255"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.201553" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.201723" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.201790" elapsed="0.000065"/>
</return>
<msg time="2026-08-15T23:47:28.204054" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:28.199311" elapsed="0.004772"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.205981" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:28.205490" elapsed="0.000540"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:28.206641" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:28.206183" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:28.292587" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:28.293325" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:28.293905" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.209185" elapsed="0.085803">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:28.206758" elapsed="0.088720">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.296084" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:28.295575" elapsed="0.001008"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:28.206739" elapsed="0.089916">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.298024" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.298527" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:28.298430" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:28.298385" elapsed="0.000293"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.299057" elapsed="0.000054"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.299225" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.204477" elapsed="0.095007">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.299662" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.079501" elapsed="0.220437">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:28.300602" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:28.300151" elapsed="0.000620"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:28.300112" elapsed="0.000759"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:28.300950" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:28.070690" elapsed="0.230543">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.355993" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:31.355354" elapsed="0.000694"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:31.357150" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.356883" elapsed="0.000341">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:31.357422" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:31.356403" elapsed="0.001064"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.358433" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:31.357826" elapsed="0.000655"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:31.359140" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:31.359402" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:31.358875" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.360300" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:31.359785" elapsed="0.000612"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.361643" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:31.361385" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.362245" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:31.361969" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.362997" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:31.362670" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:31.363750" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:31.363526" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:31.363867" elapsed="0.000041"/>
</return>
<msg time="2026-08-15T23:47:31.364039" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:31.363208" elapsed="0.000857"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:31.364218" elapsed="0.000250"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:31.362504" elapsed="0.002004"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.365069" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:31.364754" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:31.365794" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:31.365587" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:31.365886" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:31.366037" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:31.365275" elapsed="0.000787"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:31.366209" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:31.364624" elapsed="0.001845"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:31.362326" elapsed="0.004178"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:31.366547" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:47:31.366716" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:31.361057" elapsed="0.005685"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:31.360569" elapsed="0.006250"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.367094" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:31.366884" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:31.360509" elapsed="0.006719"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.368506" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:31.367527" elapsed="0.001027"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:31.368688" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:31.353504" elapsed="0.015444"/>
</kw>
<msg time="2026-08-15T23:47:31.369119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:31.339245" elapsed="0.029928"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.382722" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.396219" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.409248" 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-08-15T23:47:31.409458" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.409634" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.410149" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:31.409930" elapsed="0.000366"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:31.409913" elapsed="0.000462"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.410552" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.410904" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.411263" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:31.409876" elapsed="0.001586"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.409713" elapsed="0.001780"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.411639" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.411716" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:31.411866" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:31.334686" elapsed="0.077208"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:31.413560" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.413145" elapsed="0.000615">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:31.414003" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:31.412588" elapsed="0.001441"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.414355" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:31.414101" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.415294" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:31.414726" elapsed="0.000610"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:31.414523" elapsed="0.000924"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:31.414082" elapsed="0.001389"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.422183" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:31.415623" elapsed="0.006588"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:31.422263" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:31.422419" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:31.412255" elapsed="0.010190"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:31.424080" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.423634" elapsed="0.000632">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:31.424492" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:31.423144" elapsed="0.001375"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:31.424729" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:31.424592" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:31.424573" elapsed="0.000257"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.425009" elapsed="0.000024"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.425181" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.425247" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:31.427394" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:31.422819" elapsed="0.004603"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.429115" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:31.428638" elapsed="0.000525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:31.429766" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:31.429314" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:31.522500" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:31.523115" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:31.523538" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.432158" elapsed="0.092330">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:31.429900" elapsed="0.095083">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.525474" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:31.525071" elapsed="0.000836"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:31.429881" elapsed="0.096094">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.527241" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.527563" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:31.527474" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:31.527433" elapsed="0.000273"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.528062" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.528226" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.427784" elapsed="0.100690">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.528645" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.310832" elapsed="0.218276">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:31.529731" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:31.529327" elapsed="0.000606"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:31.529287" elapsed="0.000701"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:31.530063" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:31.302299" elapsed="0.227992">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.585640" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:34.585028" elapsed="0.000667"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:34.586792" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.586516" elapsed="0.000382">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:34.587102" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:34.586064" elapsed="0.001082"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.588206" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:34.587488" elapsed="0.000765"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:34.588870" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:34.589136" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:34.588603" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.589923" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.589510" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.591181" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.590921" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.591653" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.591383" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.592471" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:34.592143" elapsed="0.000354"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:34.593238" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.593015" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:34.593316" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:47:34.593477" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:34.592681" elapsed="0.000821"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.593652" elapsed="0.000274"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:34.592006" elapsed="0.001960"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.594570" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:34.594212" elapsed="0.000384"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:34.595335" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.595123" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:34.595411" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:34.595561" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:34.594778" elapsed="0.000808"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.595735" elapsed="0.000239"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:34.594081" elapsed="0.001933"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:34.591735" elapsed="0.004315"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:34.596093" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:34.596249" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:34.590578" elapsed="0.005723"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.590177" elapsed="0.006185"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.596631" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.596421" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.590131" elapsed="0.006633"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.598109" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:34.597084" elapsed="0.001076"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:34.598293" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:34.583385" elapsed="0.015143"/>
</kw>
<msg time="2026-08-15T23:47:34.598698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:34.568978" elapsed="0.029776"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.611628" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.624564" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.637530" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.637734" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.637929" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.638505" elapsed="0.000071"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.638236" elapsed="0.000422"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:34.638220" elapsed="0.000518"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.638944" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.639264" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.639710" elapsed="0.000025"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:34.638189" elapsed="0.001760"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.638045" elapsed="0.001936"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.640134" elapsed="0.000027"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.640229" elapsed="0.000020"/>
</return>
<msg time="2026-08-15T23:47:34.640411" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:34.564617" elapsed="0.075826"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:34.642368" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.641965" elapsed="0.000601">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:34.642749" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:34.641361" elapsed="0.001413"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.643130" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.642872" elapsed="0.000421"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.644285" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:34.643556" elapsed="0.000800"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.643327" elapsed="0.001157"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.642852" elapsed="0.001662"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.651517" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:34.644696" elapsed="0.006849"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:34.651598" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:34.651756" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:34.640921" elapsed="0.010861"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:34.653451" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.653072" elapsed="0.000568">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:34.653920" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:34.652550" elapsed="0.001397"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:34.654160" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:47:34.654022" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.654003" elapsed="0.000242"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.654388" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.654556" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.654666" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:34.656892" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:34.652163" elapsed="0.004758"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.658606" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.658134" elapsed="0.000521"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.659289" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.658824" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:34.754293" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:34.754874" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:34.755289" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.661653" elapsed="0.094589">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:34.659406" elapsed="0.097305">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.757211" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.756794" elapsed="0.000806"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:34.659387" elapsed="0.098275">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.758719" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.759112" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:34.759026" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:34.758987" elapsed="0.000265"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.759570" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.759723" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.657285" elapsed="0.102722">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.760178" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.540123" elapsed="0.220322">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.761072" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.760654" elapsed="0.000520"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:34.760616" elapsed="0.000591"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.761252" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.531455" elapsed="0.229937">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:47:34.761581" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.276147" elapsed="32.485566">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:47:02.254892" elapsed="32.507014">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.773664" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.774028" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.774212" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:47:34.773834" elapsed="0.000443"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.773755" elapsed="0.000549"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:47:34.775703" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:47:34.775435" elapsed="0.000295"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.776344" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.775907" elapsed="0.000479"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:34.795105" elapsed="0.000867"/>
</kw>
<msg time="2026-08-15T23:47:34.796202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:34.794727" elapsed="0.001547"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:34.794310" elapsed="0.002040"/>
</kw>
<msg time="2026-08-15T23:47:34.796436" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:34.785576" elapsed="0.010932"/>
</kw>
<msg time="2026-08-15T23:47:34.796620" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:34.785205" elapsed="0.011439"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.840772" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:34.840110" elapsed="0.000790"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:34.842476" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:34.841974" elapsed="0.000611">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:34.842711" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:34.841201" elapsed="0.001650"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.844292" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:34.843189" elapsed="0.001232"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:34.845170" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:34.845399" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:34.844951" elapsed="0.000552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.846300" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.845811" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.848322" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.848061" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.848953" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.848598" elapsed="0.000381"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.849945" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:34.849429" elapsed="0.000544"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:34.850735" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.850511" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:34.850887" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:47:34.851050" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:34.850161" elapsed="0.000914"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.851225" elapsed="0.000234"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:34.849294" elapsed="0.002206"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.852060" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:34.851744" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:34.852858" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.852625" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:34.852934" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:34.853083" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:34.852266" elapsed="0.000841"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:34.853253" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:34.851615" elapsed="0.001897"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:34.849078" elapsed="0.004489"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:34.853631" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:47:34.854027" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:34.847272" elapsed="0.006844"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.846539" elapsed="0.007653"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.854484" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.854268" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.846517" elapsed="0.008199"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.855854" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:34.854891" elapsed="0.001073"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:34.856187" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:34.839127" elapsed="0.017207"/>
</kw>
<msg time="2026-08-15T23:47:34.856448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:34.826090" elapsed="0.030423"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.869082" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.881544" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.894019" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.894209" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.894379" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.894787" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.894642" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:34.894626" elapsed="0.000264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.895033" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.895196" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.895357" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:34.894596" elapsed="0.000813"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.894454" elapsed="0.000980"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.895575" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:34.895650" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:34.895767" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:34.821694" elapsed="0.074099"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.896964" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.896691" elapsed="0.000318"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:34.909086" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:34.909195" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:34.909324" 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-08-15T23:47:34.899300" elapsed="0.010061"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.897075" elapsed="0.012341"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.909666" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.909454" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.897057" elapsed="0.012725"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.915089" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.911438" elapsed="0.003713"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.911132" elapsed="0.004067"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.911106" elapsed="0.004128"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.919178" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:34.915617" elapsed="0.003628"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.915312" elapsed="0.003979"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.915289" elapsed="0.004037"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.920122" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:34.919557" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.920614" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.920257" elapsed="0.000438"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.921440" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:34.920994" elapsed="0.000473"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.920730" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.920231" elapsed="0.001292"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.922068" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:34.921677" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:34.922394" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:34.922164" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:34.923053" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:34.922631" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:34.922475" elapsed="0.000639"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:34.922146" elapsed="0.000990"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:34.923283" elapsed="0.000459"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:47:34.924402" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:34.924038" elapsed="0.000416"/>
</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-08-15T23:47:34.924619" elapsed="0.005712"/>
</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-08-15T23:47:34.910494" elapsed="0.019901"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:47:34.930440" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:47:34.932794" 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-08-15T23:47:34.896070" elapsed="0.036778"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:47:34.932902" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:47:34.796880" elapsed="0.136150"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:47:34.774981" elapsed="0.158111"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:47:34.774502" elapsed="0.158641"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:47:01.919459" elapsed="33.013770">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:47:01.918979" elapsed="33.014347">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:47:01.918602" elapsed="33.014785">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:47:01.918065" elapsed="33.015419">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:35.938571" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:35.937914" elapsed="0.000704"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:47:35.938701" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:47:35.938993" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:47:35.936851" elapsed="0.002178"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:35.964920" elapsed="0.000927"/>
</kw>
<msg time="2026-08-15T23:47:35.965998" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:35.964437" elapsed="0.001623"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:35.964034" elapsed="0.002104"/>
</kw>
<msg time="2026-08-15T23:47:35.966180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:35.955083" elapsed="0.011145"/>
</kw>
<msg time="2026-08-15T23:47:35.966331" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:35.954717" elapsed="0.011638"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:35.967624" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:35.966548" elapsed="0.001115"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:35.968278" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:35.967794" elapsed="0.000578"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.003815" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.003373" elapsed="0.000475"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.004762" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.004492" elapsed="0.000375">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:36.004972" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:36.004069" elapsed="0.000965"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.005723" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:36.005258" elapsed="0.000495"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.006210" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:36.006372" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:36.006063" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.006903" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.006621" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.008029" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.007725" elapsed="0.000352"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.008556" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.008261" elapsed="0.000325"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.009320" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.009009" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.010182" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.009954" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.010261" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:47:36.010423" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.009595" elapsed="0.000853"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.010609" elapsed="0.000274"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:47:36.008854" elapsed="0.002071"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.011472" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.011173" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.012283" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.012035" elapsed="0.000276"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.012362" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:36.012517" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.011692" elapsed="0.000850"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.012714" elapsed="0.000251"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:36.011042" elapsed="0.002019"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.013652" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.013322" elapsed="0.000359"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.014420" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.014208" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.014495" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:36.014660" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.013887" elapsed="0.000802"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.014856" elapsed="0.000403"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:47:36.013186" elapsed="0.002116"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.015911" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.015553" elapsed="0.000386"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.016704" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.016478" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.016795" elapsed="0.000049"/>
</return>
<msg time="2026-08-15T23:47:36.016972" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.016133" elapsed="0.000884"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.017211" elapsed="0.000233"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:47:36.015420" elapsed="0.002065"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.018066" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.017736" elapsed="0.000356"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.018840" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.018607" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.018917" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:36.019069" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.018282" elapsed="0.000812"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.019247" elapsed="0.000228"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:47:36.017604" elapsed="0.001912"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.020097" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.019768" elapsed="0.000355"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.020855" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.020628" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.020932" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:36.021161" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.020307" elapsed="0.000881"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.021349" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:47:36.019631" elapsed="0.001985"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.022173" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.021875" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.022921" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.022691" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.022997" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:36.023173" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.022380" 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-08-15T23:47:36.023350" elapsed="0.000221"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:47:36.021728" elapsed="0.001882"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.024176" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.023874" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.024930" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.024701" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.025050" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:36.025205" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.024382" elapsed="0.000848"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.025376" elapsed="0.000218"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:36.023722" elapsed="0.001913"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:36.008641" elapsed="0.017029"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:36.025715" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:36.025892" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:36.007388" elapsed="0.018532"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.007075" elapsed="0.018877"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.026125" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.025978" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.007051" elapsed="0.019197"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.027343" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:36.026453" elapsed="0.000919"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:36.027474" elapsed="0.000054"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:36.002308" elapsed="0.025449"/>
</kw>
<msg time="2026-08-15T23:47:36.027868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:35.987997" elapsed="0.039970"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.050985" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.074222" elapsed="0.000036"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.098416" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.098677" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.098900" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.099502" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.099231" elapsed="0.000356"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:36.099213" elapsed="0.000461"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.099906" elapsed="0.000047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.100247" elapsed="0.000046"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.100581" elapsed="0.000046"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:36.099176" elapsed="0.001578"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.099033" elapsed="0.001809"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.101002" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.101250" elapsed="0.000024"/>
</return>
<msg time="2026-08-15T23:47:36.101404" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:35.983296" elapsed="0.118136"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.130484" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.130073" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.131412" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.131092" elapsed="0.000410">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:36.131601" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:36.130731" elapsed="0.000894"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.132292" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:36.131878" elapsed="0.000443"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.132695" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:36.132955" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:36.132547" elapsed="0.000438"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.133534" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.133263" elapsed="0.000326"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:47:36.134061" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.133713" elapsed="0.000410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.134619" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.134307" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.134149" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.133692" elapsed="0.001015"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.135690" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:36.134937" elapsed="0.000784"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:36.135850" elapsed="0.000060"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:36.129024" elapsed="0.007126"/>
</kw>
<msg time="2026-08-15T23:47:36.136256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:36.115060" elapsed="0.021296"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.160240" elapsed="0.000034"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.182960" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.205320" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.205573" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.205768" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.206371" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.206104" elapsed="0.000351"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:36.206088" elapsed="0.000454"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.206745" elapsed="0.000044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.207099" elapsed="0.000043"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.207423" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:36.206055" elapsed="0.001534"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.205916" elapsed="0.001734"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.207823" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.207979" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:47:36.208122" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:36.112025" elapsed="0.096128"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.210993" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.210351" elapsed="0.000772">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:36.211268" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:36.208978" elapsed="0.002319"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.211768" elapsed="0.000140"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.211411" elapsed="0.000580"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.213243" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.212485" elapsed="0.000800"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.212020" elapsed="0.001345"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.211391" elapsed="0.001998"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.217341" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:36.213543" elapsed="0.003836"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:36.217568" elapsed="0.000046"/>
</return>
<msg time="2026-08-15T23:47:36.217823" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:36.208575" elapsed="0.009288"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.220451" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.219744" elapsed="0.000798"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.221540" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.220775" elapsed="0.000862"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.222431" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.221901" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.223170" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.222663" elapsed="0.000570"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:47:36.224738" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:47:36.224162" elapsed="0.000739"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:47:36.225734" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:47:36.225199" elapsed="0.000705"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.226168" elapsed="0.000499"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.227679" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.226999" elapsed="0.000942"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:47:36.228029" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:36.228303" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:47:36.223453" elapsed="0.004876"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:36.251687" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:47:36.251934" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:36.252363" 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-08-15T23:47:36.236956" elapsed="0.015504"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.228437" elapsed="0.024289"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.253385" elapsed="0.000189"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.252794" elapsed="0.001124"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.228418" elapsed="0.025562"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.261788" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.258073" elapsed="0.003855"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.256925" elapsed="0.005072"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.256773" elapsed="0.005322"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.266420" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.262917" elapsed="0.003603"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.262229" elapsed="0.004358"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.262178" elapsed="0.004507"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.269026" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:36.267531" elapsed="0.001685"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.270195" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.269468" elapsed="0.000865"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.271366" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.270889" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.270444" elapsed="0.001020"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.269417" elapsed="0.002114"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.273179" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:36.272135" elapsed="0.001147"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.273992" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.273421" elapsed="0.000677"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.275016" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.274530" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.274168" elapsed="0.000937"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.273382" elapsed="0.001790"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:36.275433" elapsed="0.000887"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:47:36.277488" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:36.276628" elapsed="0.000963"/>
</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-08-15T23:47:36.277879" elapsed="0.002823"/>
</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-08-15T23:47:36.255187" elapsed="0.025689"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:47:36.281142" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-08-15T23:47:36.280967" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.280945" elapsed="0.000343"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.281440" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.281556" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:47:36.283913" 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-08-15T23:47:36.218431" elapsed="0.065513"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:47:36.284011" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:36.284167" 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-08-15T23:47:35.971901" elapsed="0.312291"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.284531" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.284291" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.284274" elapsed="0.000359"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:47:36.284668" elapsed="0.000027"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:47:35.968733" elapsed="0.316061"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:35.968410" elapsed="0.316454"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:35.967764" elapsed="0.317124"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.285032" elapsed="0.000278"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:47:35.940082" elapsed="0.345292"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:47:35.939204" elapsed="0.346278"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.286189" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.285661" elapsed="0.000558"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:36.305399" elapsed="0.000784"/>
</kw>
<msg time="2026-08-15T23:47:36.306235" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:36.304992" elapsed="0.001297"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:36.304582" elapsed="0.001781"/>
</kw>
<msg time="2026-08-15T23:47:36.306405" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:36.295594" elapsed="0.010855"/>
</kw>
<msg time="2026-08-15T23:47:36.306549" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:36.295264" elapsed="0.011310"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.356441" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.355857" elapsed="0.000633"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.357578" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.357335" elapsed="0.000318">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:36.357873" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:36.356850" elapsed="0.001070"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.358878" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:36.358258" elapsed="0.000669"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.359513" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:36.359768" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:36.359267" elapsed="0.000695"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.360653" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.360297" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.361972" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.361657" elapsed="0.000361"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.362436" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.362173" elapsed="0.000288"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.363288" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.362832" elapsed="0.000483"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.364102" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.363876" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.364227" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:47:36.364387" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.363501" 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-08-15T23:47:36.364562" elapsed="0.000230"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:36.362684" elapsed="0.002169"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.365446" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:36.365111" elapsed="0.000361"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:36.366212" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.365999" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:36.366295" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:36.366446" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:36.365655" elapsed="0.000816"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:36.366618" elapsed="0.000235"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:36.364967" elapsed="0.001927"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:36.362512" elapsed="0.004417"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:36.366973" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:36.367127" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:36.361331" elapsed="0.005822"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.360916" elapsed="0.006295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.367483" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.367271" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.360873" elapsed="0.006743"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.368727" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:36.367954" elapsed="0.000821"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:36.368925" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:36.354267" elapsed="0.014889"/>
</kw>
<msg time="2026-08-15T23:47:36.369418" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:36.339991" elapsed="0.029487"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.382207" elapsed="0.000027"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.394847" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.407425" elapsed="0.000034"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.407668" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.407863" elapsed="0.000025"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.408349" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.408132" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:36.408117" elapsed="0.000451"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.408747" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.409089" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.409458" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:36.408086" elapsed="0.001570"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.407948" elapsed="0.001738"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.409854" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.409938" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:47:36.410061" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:36.335711" elapsed="0.074376"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.411687" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.411303" elapsed="0.000615">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:36.412098" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:36.410774" elapsed="0.001350"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.412441" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.412196" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.413355" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:36.412783" elapsed="0.000613"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:36.412608" elapsed="0.000899"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.412177" elapsed="0.001355"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.420171" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:36.413683" elapsed="0.006515"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:36.420250" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:36.420404" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:36.410447" elapsed="0.009982"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:36.422229" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.421857" elapsed="0.000557">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:36.422596" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:36.421347" elapsed="0.001275"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:36.422869" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:36.422694" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:36.422676" elapsed="0.000311"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.423139" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.423308" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.423376" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:36.425344" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:36.420754" elapsed="0.004617"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.427102" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.426624" elapsed="0.000526"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:36.427751" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:36.427300" elapsed="0.000519"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:36.443782" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:36.444151" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:36.444331" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.430152" elapsed="0.014613">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:36.427890" elapsed="0.017095">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.445175" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.445022" elapsed="0.000364"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:36.427871" elapsed="0.017544">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.445929" elapsed="0.000033"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.446136" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:36.446069" elapsed="0.000134"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:36.446039" elapsed="0.000195"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.446432" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.446530" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.425735" elapsed="0.020945">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.446786" elapsed="0.000044"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.312484" elapsed="0.134464">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:36.447323" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:36.447075" elapsed="0.000412"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:36.447051" elapsed="0.000471"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:36.447570" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.307355" elapsed="0.140355">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.501289" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:39.500654" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:39.502427" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.502162" elapsed="0.000340">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:39.502717" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:39.501690" elapsed="0.001167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.503902" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:39.503205" elapsed="0.000748"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:39.504535" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:39.504811" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:39.504286" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.505555" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:39.505192" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.506901" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:39.506590" elapsed="0.000358"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.507381" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:39.507108" elapsed="0.000299"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.508162" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:39.507773" elapsed="0.000416"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:39.508940" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:39.508700" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:39.509019" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:39.509181" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:39.508375" elapsed="0.000830"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:39.509357" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:39.507640" elapsed="0.001997"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.510209" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:39.509908" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:39.511148" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:39.510930" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:39.511226" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:39.511440" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:39.510424" elapsed="0.001042"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:39.511615" elapsed="0.000244"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:39.509752" elapsed="0.002148"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:39.507461" elapsed="0.004474"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:39.511980" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:39.512138" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:39.506265" elapsed="0.005899"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:39.505861" elapsed="0.006362"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.512491" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:39.512281" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:39.505761" elapsed="0.006861"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.513731" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:39.512941" elapsed="0.000838"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:39.513930" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:39.499053" elapsed="0.015109"/>
</kw>
<msg time="2026-08-15T23:47:39.514329" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:39.484655" elapsed="0.029729"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.527133" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.539784" elapsed="0.000049"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.552360" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.552554" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.552725" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.553213" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:39.553000" elapsed="0.000354"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:39.552984" elapsed="0.000446"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.553608" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.553971" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.554321" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:39.552954" elapsed="0.001564"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.552817" elapsed="0.001731"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.554694" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.554771" elapsed="0.000059"/>
</return>
<msg time="2026-08-15T23:47:39.554941" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:39.480275" elapsed="0.074693"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:39.556554" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.556175" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:39.556949" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:39.555656" elapsed="0.001320"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.557298" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:39.557047" elapsed="0.000389"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.558249" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:39.557643" elapsed="0.000646"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:39.557464" elapsed="0.000933"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:39.557029" elapsed="0.001392"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.565361" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:39.558571" elapsed="0.006818"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:39.565443" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:39.565597" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:39.555331" elapsed="0.010291"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:39.567250" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.566773" elapsed="0.000662">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:39.567614" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:39.566283" elapsed="0.001357"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:39.567869" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:47:39.567711" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:39.567692" elapsed="0.000260"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.568102" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.568268" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.568334" elapsed="0.000014"/>
</return>
<msg time="2026-08-15T23:47:39.570296" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:39.565961" elapsed="0.004362"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.572087" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:39.571580" elapsed="0.000554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:39.572733" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:39.572283" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:39.675406" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:39.676080" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:39.676545" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.575114" elapsed="0.102418">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:39.572872" elapsed="0.105193">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.678582" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:39.678166" elapsed="0.000883"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:39.572852" elapsed="0.106264">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.680410" elapsed="0.000066"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.680738" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:39.680646" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:39.680605" elapsed="0.000346"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.681291" elapsed="0.000053"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.681454" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.570680" elapsed="0.111065">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.681966" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.456338" elapsed="0.225859">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:39.682968" elapsed="0.000091"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:39.682401" elapsed="0.000778"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:39.682364" elapsed="0.000874"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:39.683312" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:39.448674" elapsed="0.234874">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.742166" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:42.741507" elapsed="0.000719"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:42.743365" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.743088" elapsed="0.000357">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:42.743652" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:42.742586" elapsed="0.001112"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.744751" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:42.744115" elapsed="0.000783"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:42.745494" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:42.745753" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:42.745241" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.746542" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:42.746160" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.747854" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:42.747575" elapsed="0.000347"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.748372" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:42.748082" elapsed="0.000354"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.749138" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:42.748837" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:42.749983" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:42.749667" elapsed="0.000343"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:42.750064" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:42.750230" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:42.749348" 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-08-15T23:47:42.750407" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:42.748676" elapsed="0.002025"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.751286" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:42.750984" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:42.752207" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:42.751977" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:42.752286" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:42.752461" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:42.751493" elapsed="0.000994"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:42.752637" elapsed="0.000253"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:42.750852" elapsed="0.002080"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:42.748494" elapsed="0.004473"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:42.753012" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:42.753180" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:42.747251" elapsed="0.005956"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:42.746843" elapsed="0.006424"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.753537" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:42.753328" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:42.746754" elapsed="0.006956"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.754842" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:42.754036" elapsed="0.000857"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:42.755028" elapsed="0.000081"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:42.739846" elapsed="0.015427"/>
</kw>
<msg time="2026-08-15T23:47:42.755443" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:42.725262" elapsed="0.030236"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.768326" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.781501" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.794376" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.794571" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.794743" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.795239" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:42.795022" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:42.795007" elapsed="0.000458"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.795660" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.796006" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.796374" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:42.794977" elapsed="0.001612"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.794838" elapsed="0.001781"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.796767" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.796863" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:47:42.796987" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:42.720850" elapsed="0.076205"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:42.798683" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.798277" elapsed="0.000644">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:42.799106" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:42.797743" elapsed="0.001388"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.799451" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:42.799205" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.800345" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:42.799827" elapsed="0.000560"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:42.799621" elapsed="0.000913"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:42.799185" elapsed="0.001376"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.807525" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:42.800714" elapsed="0.006838"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:42.807605" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:47:42.807763" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:42.797419" elapsed="0.010375"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:42.809462" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.809086" elapsed="0.000568">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:42.809862" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:42.808544" elapsed="0.001345"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:42.810101" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:42.809962" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:42.809943" elapsed="0.000242"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.810339" elapsed="0.000024"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.810510" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.810575" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:42.812885" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:42.808174" elapsed="0.004739"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.814592" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:42.814128" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:42.815265" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:42.814792" elapsed="0.000519"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:42.910079" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:42.910648" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:42.911223" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.817657" elapsed="0.094586">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:42.815379" elapsed="0.097359">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.913255" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:42.912889" elapsed="0.000751"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:42.815360" elapsed="0.098343">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.914798" elapsed="0.000135"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.915185" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:42.915099" elapsed="0.000180"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:42.915058" elapsed="0.000269"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.915649" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.915845" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.813277" elapsed="0.102855">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.916325" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.694957" elapsed="0.221698">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:42.917436" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:42.917242" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:42.917216" elapsed="0.000319"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:42.917568" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:42.684742" elapsed="0.232929">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.972570" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:45.971933" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:45.973785" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:45.973504" elapsed="0.000407">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:45.974153" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:45.973033" elapsed="0.001167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.975191" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:45.974547" elapsed="0.000692"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:45.976040" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:45.976300" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:45.975641" elapsed="0.000706"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.977089" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:45.976689" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.978459" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:45.978190" elapsed="0.000316"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.978972" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:45.978666" elapsed="0.000333"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.979678" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:45.979370" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:45.980515" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:45.980287" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:45.980595" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:45.980761" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:45.979965" elapsed="0.000822"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:45.980968" elapsed="0.000249"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:45.979236" elapsed="0.002023"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.981826" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:45.981506" elapsed="0.000348"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:45.982631" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:45.982386" elapsed="0.000272"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:45.982710" elapsed="0.000045"/>
</return>
<msg time="2026-08-15T23:47:45.982923" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:45.982057" elapsed="0.000894"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:45.983103" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:45.981376" elapsed="0.001991"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:45.979055" elapsed="0.004349"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:45.983449" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:45.983610" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:45.977757" elapsed="0.005881"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:45.977350" elapsed="0.006348"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:45.984010" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:45.983760" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:45.977303" elapsed="0.006847"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:45.985484" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:45.984458" elapsed="0.001076"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:45.985671" elapsed="0.000078"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:45.970235" elapsed="0.015730"/>
</kw>
<msg time="2026-08-15T23:47:45.986188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:45.955592" elapsed="0.030657"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:45.999279" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.012235" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.025046" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.025245" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.025417" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.025907" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:46.025673" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:46.025658" elapsed="0.000496"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.026334" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.026647" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.027019" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:46.025627" elapsed="0.001596"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.025493" elapsed="0.001759"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.027399" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.027476" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:47:46.027598" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:45.951073" elapsed="0.076551"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:46.029268" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:46.028877" elapsed="0.000580">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:46.029636" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:46.028327" elapsed="0.001335"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.030108" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:46.029734" elapsed="0.000521"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:46.031012" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:46.030464" elapsed="0.000589"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:46.030284" elapsed="0.000877"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:46.029715" elapsed="0.001471"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:46.038033" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:46.031336" elapsed="0.006725"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:46.038157" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:47:46.038331" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:46.028003" elapsed="0.010355"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:46.040032" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:46.039564" elapsed="0.000657">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:46.040404" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:46.039060" elapsed="0.001371"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:46.040645" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:46.040505" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:46.040485" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.040932" elapsed="0.000028"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.041116" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.041184" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:46.043341" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:46.038706" elapsed="0.004663"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:46.045048" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:46.044570" elapsed="0.000526"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:46.045700" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:46.045247" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:46.143224" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:46.143752" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:46.144213" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:46.048087" elapsed="0.097100">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:46.045834" elapsed="0.099787">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.146114" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:46.145703" elapsed="0.000823"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:46.045813" elapsed="0.100775">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.147733" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.148126" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:46.148039" elapsed="0.000182"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:46.148000" elapsed="0.000269"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.148589" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.148748" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:46.043725" elapsed="0.105307">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.149206" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:45.926881" elapsed="0.222545">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:46.150100" elapsed="0.000107"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:46.149633" elapsed="0.000687"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:46.149595" elapsed="0.000779"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:46.150448" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:45.918704" elapsed="0.231974">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.207274" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:49.206606" elapsed="0.000725"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:49.208507" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.208227" elapsed="0.000360">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:49.208787" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:49.207707" elapsed="0.001155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.210005" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:49.209231" elapsed="0.000824"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:49.210654" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:49.210954" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:49.210394" elapsed="0.000608"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.211755" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:49.211343" elapsed="0.000587"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.213224" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:49.212953" elapsed="0.000318"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.213880" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:49.213505" elapsed="0.000405"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.214594" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:49.214287" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:49.215409" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:49.215181" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:49.215489" elapsed="0.000042"/>
</return>
<msg time="2026-08-15T23:47:49.215660" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:49.214853" elapsed="0.000849"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:49.215879" elapsed="0.000263"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:49.214150" elapsed="0.002037"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.216737" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:49.216437" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:49.217505" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:49.217285" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:49.217582" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:49.217742" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:49.216968" elapsed="0.000799"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:49.217934" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:49.216307" elapsed="0.001891"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:49.213966" elapsed="0.004267"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:49.218277" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:49.218438" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:49.212589" elapsed="0.005875"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:49.212128" elapsed="0.006401"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.218825" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:49.218592" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:49.212078" elapsed="0.006887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.220414" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:49.219272" elapsed="0.001192"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:49.220597" elapsed="0.000086"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:49.204655" elapsed="0.016222"/>
</kw>
<msg time="2026-08-15T23:47:49.221060" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:49.189446" elapsed="0.031677"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.234297" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.247247" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.260194" elapsed="0.000041"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.260452" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.260635" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.261193" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:49.260963" elapsed="0.000384"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:49.260944" elapsed="0.000487"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.261615" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.261964" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.262324" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:49.260903" elapsed="0.001623"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.260724" elapsed="0.001833"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.262706" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.262787" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:49.262970" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:49.184923" elapsed="0.078076"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:49.264908" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.264386" elapsed="0.000737">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:49.265312" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:49.263777" elapsed="0.001563"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.265690" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:49.265416" elapsed="0.000475"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.266620" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:49.266098" elapsed="0.000564"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:49.265921" elapsed="0.000850"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:49.265397" elapsed="0.001435"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.273599" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:49.266988" elapsed="0.006649"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:49.273707" elapsed="0.000048"/>
</return>
<msg time="2026-08-15T23:47:49.273945" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:49.263392" elapsed="0.010580"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:49.275907" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.275417" elapsed="0.000694">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:49.276296" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:49.274873" elapsed="0.001450"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:49.276550" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:47:49.276401" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:49.276381" elapsed="0.000256"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.276783" elapsed="0.000125"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.277067" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.277136" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:49.279315" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:49.274469" elapsed="0.004875"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.281087" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:49.280586" elapsed="0.000553"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:49.281746" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:49.281291" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:49.374051" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:49.374654" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:49.375147" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.284178" elapsed="0.092109">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:49.281892" elapsed="0.094714">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.377075" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:49.376705" elapsed="0.000642"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:49.281872" elapsed="0.095519">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.378211" elapsed="0.000044"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.378434" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:49.378371" elapsed="0.000131"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:49.378343" elapsed="0.000192"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.378794" elapsed="0.000092"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.378965" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.279738" elapsed="0.099400">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.379331" elapsed="0.000025"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.160184" elapsed="0.219302">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:49.379982" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:49.379626" elapsed="0.000482"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:49.379601" elapsed="0.000544"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:49.380195" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:49.151961" elapsed="0.228391">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.436230" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:52.435586" elapsed="0.000699"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:52.437476" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.437178" elapsed="0.000375">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:52.437760" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:52.436636" elapsed="0.001198"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.438945" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:52.438192" elapsed="0.000809"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:52.439605" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:52.439904" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:52.439347" elapsed="0.000608"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.440656" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:52.440291" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.442050" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:52.441757" elapsed="0.000340"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.442530" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:52.442259" elapsed="0.000298"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.443322" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:52.443018" elapsed="0.000331"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:52.444133" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:52.443902" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:52.444212" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:52.444383" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:52.443541" elapsed="0.000868"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:52.444621" elapsed="0.000282"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:52.442787" elapsed="0.002159"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.445510" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:52.445195" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:52.446269" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:52.446058" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:52.446346" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:52.446494" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:52.445717" elapsed="0.000802"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:52.446666" elapsed="0.000236"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:52.445064" elapsed="0.001878"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:52.442610" elapsed="0.004367"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:52.447021" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:47:52.447175" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:52.441426" elapsed="0.005775"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:52.440982" elapsed="0.006282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.447535" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:52.447325" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:52.440933" elapsed="0.006735"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.449004" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:52.448005" elapsed="0.001050"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:52.449189" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:52.433995" elapsed="0.015475"/>
</kw>
<msg time="2026-08-15T23:47:52.449643" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:52.419305" elapsed="0.030394"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.462513" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.475243" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.488229" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.488462" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.488637" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.489148" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:52.488927" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:52.488912" elapsed="0.000473"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.489567" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.489908" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.490268" elapsed="0.000024"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:52.488880" elapsed="0.001586"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.488712" elapsed="0.001784"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.490641" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.490718" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:52.490871" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:52.414957" elapsed="0.075943"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:52.492524" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.492124" elapsed="0.000590">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:52.492984" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:52.491589" elapsed="0.001423"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.493330" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:52.493085" elapsed="0.000418"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.494287" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:52.493708" elapsed="0.000622"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:52.493532" elapsed="0.000906"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:52.493065" elapsed="0.001399"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.501107" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:52.494613" elapsed="0.006522"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:52.501187" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:52.501373" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:52.491263" elapsed="0.010138"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:52.502997" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.502595" elapsed="0.000588">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:52.503365" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:52.502101" elapsed="0.001290"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:52.503600" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:52.503462" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:52.503442" elapsed="0.000242"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.503957" elapsed="0.000026"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.504136" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.504203" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:52.506351" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:52.501729" elapsed="0.004650"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.508113" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:52.507616" elapsed="0.000545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:52.508769" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:52.508311" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:52.598192" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:52.598788" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:52.599233" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.511197" elapsed="0.089069">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:52.508917" elapsed="0.091803">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.601244" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:52.600863" elapsed="0.000826"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:52.508899" elapsed="0.092878">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.602928" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.603235" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:52.603149" elapsed="0.000177"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:52.603111" elapsed="0.000264"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.603690" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.603885" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.506741" elapsed="0.097386">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.604292" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.389966" elapsed="0.214542">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:52.605164" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:52.604709" elapsed="0.000738"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:52.604672" elapsed="0.000848"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:52.605620" elapsed="0.000050"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:52.381505" elapsed="0.224498">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.665219" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:55.664541" elapsed="0.000736"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:55.666440" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.666160" elapsed="0.000359">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:55.666721" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:55.665633" elapsed="0.001135"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.667922" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:55.667225" elapsed="0.000756"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:55.668586" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:55.669002" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:55.668327" elapsed="0.000727"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.669778" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:55.669399" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.671250" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:55.670967" elapsed="0.000330"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.671734" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:55.671457" elapsed="0.000304"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.672502" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:55.672192" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:55.673368" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:55.673138" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:55.673447" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:47:55.673612" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:55.672713" elapsed="0.000925"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:55.673789" elapsed="0.000293"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:55.672053" elapsed="0.002073"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.674680" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:55.674377" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:55.675509" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:55.675293" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:55.675588" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:55.675739" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:55.674905" elapsed="0.000860"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:55.675932" elapsed="0.000316"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:55.674245" elapsed="0.002051"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:55.671831" elapsed="0.004502"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:55.676378" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:47:55.676540" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:55.670514" elapsed="0.006053"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:55.670106" elapsed="0.006522"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.676927" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:55.676693" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:55.670058" elapsed="0.007054"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.678280" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:55.677433" elapsed="0.000900"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:55.678466" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:55.662859" elapsed="0.015842"/>
</kw>
<msg time="2026-08-15T23:47:55.678891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:55.647907" elapsed="0.031041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.692385" elapsed="0.000034"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.705478" elapsed="0.000042"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.718428" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.718633" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.718831" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.719388" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:55.719169" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:55.719153" elapsed="0.000456"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.719789" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.720126" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.720476" elapsed="0.000054"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:55.719118" elapsed="0.001590"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.718912" elapsed="0.001825"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.720906" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.720985" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:55.721105" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:55.643472" elapsed="0.077659"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:55.722699" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.722325" elapsed="0.000596">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:55.723136" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:55.721834" elapsed="0.001327"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.723477" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:55.723233" elapsed="0.000379"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.724324" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:55.723837" elapsed="0.000527"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:55.723640" elapsed="0.000835"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:55.723214" elapsed="0.001286"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.731107" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:55.724649" elapsed="0.006485"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:55.731186" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:55.731340" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:55.721487" elapsed="0.009877"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:55.733118" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.732665" elapsed="0.000636">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:55.733481" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:55.732164" elapsed="0.001342"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:55.733715" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:47:55.733578" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:55.733559" elapsed="0.000256"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.733962" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.734129" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.734194" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:47:55.736330" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:55.731841" elapsed="0.004516"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.738044" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:55.737546" elapsed="0.000545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:55.738691" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:55.738241" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:55.829206" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:55.829744" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:55.830237" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.741196" elapsed="0.090060">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:55.738864" elapsed="0.092836">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.832231" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:55.831787" elapsed="0.000844"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:55.738843" elapsed="0.093851">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.833787" elapsed="0.000139"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.834181" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:55.834092" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:55.834053" elapsed="0.000272"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.834641" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.834838" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.736716" elapsed="0.098415">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.835301" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.616758" elapsed="0.218684">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:55.835863" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:55.835570" elapsed="0.000395"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:55.835546" elapsed="0.000453"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:55.836044" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:55.607157" elapsed="0.229027">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.890961" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:58.890308" elapsed="0.000707"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:58.892194" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.891919" elapsed="0.000351">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:58.892469" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:58.891444" elapsed="0.001069"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.893511" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:58.892917" elapsed="0.000641"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:47:58.894286" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:47:58.894554" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:47:58.894029" elapsed="0.000571"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.895309" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:58.894951" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.896634" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:58.896339" elapsed="0.000342"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.897125" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:47:58.896855" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.897843" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:58.897516" elapsed="0.000382"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:58.898630" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:58.898406" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:58.898708" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:47:58.898948" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:58.898090" elapsed="0.000884"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:58.899125" elapsed="0.000246"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:47:58.897383" elapsed="0.002028"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.899971" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:47:58.899656" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:47:58.900720" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:47:58.900492" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:47:58.900810" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:47:58.900964" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:47:58.900178" elapsed="0.000811"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:47:58.901135" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:47:58.899525" elapsed="0.001871"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:47:58.897206" elapsed="0.004224"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:47:58.901480" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:47:58.901637" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:47:58.896012" elapsed="0.005651"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:58.895561" elapsed="0.006159"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.902013" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:58.901779" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:58.895515" elapsed="0.006629"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.903421" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:47:58.902441" elapsed="0.001061"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:47:58.903637" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:47:58.888662" elapsed="0.015234"/>
</kw>
<msg time="2026-08-15T23:47:58.904066" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:47:58.874005" elapsed="0.030115"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.916997" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.929756" elapsed="0.000027"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.942550" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.942744" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.942940" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.943415" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:58.943198" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:58.943182" elapsed="0.000451"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.943833" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.944147" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.944495" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:47:58.943152" elapsed="0.001565"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:47:58.943018" elapsed="0.001729"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.944914" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:58.944992" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:47:58.945116" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:47:58.869465" elapsed="0.075677"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:58.946759" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.946389" elapsed="0.000592">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:58.947160" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:58.945894" elapsed="0.001292"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.947510" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:58.947259" elapsed="0.000386"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.948414" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:47:58.947874" elapsed="0.000582"/>
</kw>
<status status="PASS" start="2026-08-15T23:47:58.947673" elapsed="0.000894"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:58.947240" elapsed="0.001352"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.955407" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:47:58.948760" elapsed="0.006674"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:47:58.955488" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:47:58.955643" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:58.945543" elapsed="0.010125"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:47:58.957270" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.956893" elapsed="0.000561">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:47:58.957635" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:47:58.956349" elapsed="0.001312"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:47:58.957899" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:47:58.957734" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:47:58.957715" elapsed="0.000269"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.958128" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:58.958296" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:47:58.958362" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:47:58.960579" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:47:58.956023" elapsed="0.004584"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.962440" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:58.961977" elapsed="0.000510"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:47:58.963138" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:47:58.962638" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:47:59.067901" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:47:59.068459" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:47:59.068958" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.965499" elapsed="0.104414">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:47:58.963252" elapsed="0.107211">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:59.071019" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:59.070552" elapsed="0.000869"/>
</branch>
<status status="FAIL" start="2026-08-15T23:47:58.963233" elapsed="0.108254">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:59.072580" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:59.073059" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:47:59.072964" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:59.072919" elapsed="0.000286"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:59.073462" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:47:59.073560" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.961117" elapsed="0.112600">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:59.073853" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.845373" elapsed="0.228626">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:47:59.074383" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:47:59.074129" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:47:59.074104" elapsed="0.000414"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:47:59.074563" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:47:58.837304" elapsed="0.237400">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.132628" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:02.131962" elapsed="0.000723"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:02.133892" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.133546" elapsed="0.000432">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:02.134178" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:02.133067" elapsed="0.001180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.135291" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:02.134604" elapsed="0.000734"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:02.135966" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:02.136310" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:02.135680" elapsed="0.000675"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.137079" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:02.136691" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.138540" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:02.138217" elapsed="0.000370"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.139110" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:02.138747" elapsed="0.000389"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.139906" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:02.139530" elapsed="0.000404"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:02.140680" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:02.140449" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:02.140760" elapsed="0.000054"/>
</return>
<msg time="2026-08-15T23:48:02.140953" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:02.140126" elapsed="0.000852"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:02.141134" elapsed="0.000251"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:02.139387" elapsed="0.002038"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.142001" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:02.141676" elapsed="0.000351"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:02.142818" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:02.142589" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:02.142895" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:02.143046" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:02.142212" elapsed="0.000859"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:02.143218" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:02.141544" elapsed="0.001936"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:02.139196" elapsed="0.004319"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:02.143560" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:02.143718" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:02.137874" elapsed="0.005870"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:02.137347" elapsed="0.006498"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.144120" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:02.143909" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:02.137296" elapsed="0.006961"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.145785" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:02.144561" elapsed="0.001310"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:02.146011" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:02.130001" elapsed="0.016315"/>
</kw>
<msg time="2026-08-15T23:48:02.146493" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:02.115420" elapsed="0.031154"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.159712" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.173022" elapsed="0.000049"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.186008" elapsed="0.000065"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.186376" elapsed="0.000034"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.186605" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.187206" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:02.186973" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:02.186952" elapsed="0.000484"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.187616" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.187997" elapsed="0.000025"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.188408" elapsed="0.000027"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:02.186902" elapsed="0.001719"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.186697" elapsed="0.001957"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.188828" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.188912" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:48:02.189128" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:02.110824" elapsed="0.078335"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:02.191185" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.190646" elapsed="0.000753">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:02.191621" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:02.190003" elapsed="0.001645"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.192066" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:02.191725" elapsed="0.000538"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.193091" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:02.192488" elapsed="0.000646"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:02.192294" elapsed="0.000949"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:02.191705" elapsed="0.001563"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.200120" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:02.193428" elapsed="0.006732"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:02.200231" elapsed="0.000043"/>
</return>
<msg time="2026-08-15T23:48:02.200418" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:02.189596" elapsed="0.010849"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:02.202337" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.201774" elapsed="0.000765">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:02.202737" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:02.201232" elapsed="0.001531"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:02.203013" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:02.202861" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:02.202838" elapsed="0.000261"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.203246" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.203425" elapsed="0.000034"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.203522" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:02.205784" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:02.200865" elapsed="0.004987"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.207768" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:02.207228" elapsed="0.000611"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:02.208461" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:02.207994" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:02.301338" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:02.301942" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:02.302413" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.211014" elapsed="0.092369">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:02.208578" elapsed="0.095294">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.304373" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:02.303964" elapsed="0.000790"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:02.208558" elapsed="0.096294">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.306018" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.306605" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:02.306507" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:02.306305" elapsed="0.000447"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.307135" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.307292" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.206294" elapsed="0.101246">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.307710" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.085033" elapsed="0.222932">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:02.308564" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:02.308169" elapsed="0.000551"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:02.308132" elapsed="0.000641"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:02.308885" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:02.075775" elapsed="0.233335">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.365010" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:05.364381" elapsed="0.000683"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:05.366151" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.365882" elapsed="0.000347">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:05.366424" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:05.365412" elapsed="0.001059"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.367433" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:05.366834" elapsed="0.000646"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:05.368125" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:05.368386" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:05.367840" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.369295" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:05.368767" elapsed="0.000624"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.370555" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:05.370294" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.371154" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:05.370875" elapsed="0.000307"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.371905" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:05.371545" elapsed="0.000388"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:05.372666" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:05.372439" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:05.372745" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:48:05.372964" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:05.372119" elapsed="0.000871"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:05.373143" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:05.371410" elapsed="0.002016"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.373999" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:05.373674" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:05.374743" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:05.374526" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:05.374839" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:05.374992" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:05.374210" elapsed="0.000807"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:05.375164" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:05.373542" elapsed="0.001884"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:05.371235" elapsed="0.004225"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:05.375514" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:05.375671" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:05.369964" elapsed="0.005733"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:05.369550" elapsed="0.006205"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.376063" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:05.375838" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:05.369500" elapsed="0.006697"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.377617" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:05.376493" elapsed="0.001173"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:05.377817" elapsed="0.000122"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:05.362777" elapsed="0.015330"/>
</kw>
<msg time="2026-08-15T23:48:05.378274" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:05.348398" elapsed="0.029931"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.391172" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.403787" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.416823" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.417029" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.417202" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.417687" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:05.417473" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:05.417456" elapsed="0.000476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.418107" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.418418" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.418763" elapsed="0.000025"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:05.417420" elapsed="0.001557"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.417278" elapsed="0.001728"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.419153" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.419229" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:05.419352" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:05.343967" elapsed="0.075413"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:05.421042" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.420621" elapsed="0.000612">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:05.421412" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:05.420114" elapsed="0.001324"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.421755" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:05.421509" elapsed="0.000408"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.422614" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:05.422123" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:05.421946" elapsed="0.000818"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:05.421491" elapsed="0.001297"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.429394" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:05.423012" elapsed="0.006411"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:05.429477" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:48:05.429637" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:05.419738" elapsed="0.009925"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:05.431225" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.430852" elapsed="0.000561">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:05.431628" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:05.430348" elapsed="0.001306"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:05.431920" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:48:05.431727" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:05.431708" elapsed="0.000300"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.432158" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.432327" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.432393" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:05.434611" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:05.430023" elapsed="0.004615"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.436330" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:05.435844" elapsed="0.000533"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:05.436996" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:05.436529" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:05.527843" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:05.528510" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:05.528992" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.439356" elapsed="0.090680">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:05.437110" elapsed="0.093371">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.531018" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:05.530567" elapsed="0.000849"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:05.437091" elapsed="0.094389">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.532610" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.532869" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:05.532770" elapsed="0.000163"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:05.532743" elapsed="0.000222"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.533168" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.533268" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.435011" elapsed="0.098414">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.533533" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.320890" elapsed="0.212850">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:05.534165" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:05.533911" elapsed="0.000358"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:05.533886" elapsed="0.000418"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:05.534350" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:05.310207" elapsed="0.224285">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.592538" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:08.591902" elapsed="0.000691"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:08.593771" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.593456" elapsed="0.000438">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:08.594101" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:08.592972" elapsed="0.001175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.595165" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:08.594514" elapsed="0.000700"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:08.595979" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:08.596345" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:08.595587" elapsed="0.000810"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.597130" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.596734" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.598523" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.598243" elapsed="0.000326"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.599024" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.598728" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.599751" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:08.599421" elapsed="0.000358"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:08.600622" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.600374" elapsed="0.000276"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:08.600704" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:48:08.600889" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:08.600045" elapsed="0.000871"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.601072" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:08.599283" elapsed="0.002072"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.602085" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:08.601700" elapsed="0.000413"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:08.602878" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.602638" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:08.602956" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:08.603108" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:08.602300" elapsed="0.000833"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.603285" elapsed="0.000229"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:08.601470" elapsed="0.002085"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:08.599105" elapsed="0.004489"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:08.603655" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:08.603839" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:08.597911" elapsed="0.005955"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.597412" elapsed="0.006516"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.604204" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.603990" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.597352" elapsed="0.006989"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.605493" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:08.604658" elapsed="0.000930"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:08.605744" elapsed="0.000100"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:08.590259" elapsed="0.015757"/>
</kw>
<msg time="2026-08-15T23:48:08.606188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:08.575455" elapsed="0.030788"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.619508" elapsed="0.000033"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.632676" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.645657" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.645879" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.646073" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.646590" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.646373" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:08.646357" elapsed="0.000485"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.647052" 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-08-15T23:48:08.647380" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.647731" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:08.646326" elapsed="0.001623"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.646188" elapsed="0.001792"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.648151" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.648233" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:08.648355" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:08.571061" elapsed="0.077321"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:08.650089" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.649668" elapsed="0.000633">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:08.650484" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:08.649129" elapsed="0.001381"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.650854" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.650582" elapsed="0.000412"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.651727" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:08.651218" elapsed="0.000549"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.651022" elapsed="0.000927"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.650563" elapsed="0.001412"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.658509" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:08.652129" elapsed="0.006409"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:08.658591" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:08.658748" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:08.648749" elapsed="0.010026"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:08.660608" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.660216" elapsed="0.000580">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:08.661038" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:08.659699" elapsed="0.001365"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:08.661278" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:08.661138" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.661118" elapsed="0.000244"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.661516" elapsed="0.000046"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.661722" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.661841" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:08.664063" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:08.659352" elapsed="0.004758"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.665972" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.665408" elapsed="0.000613"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.666697" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.666175" elapsed="0.000591"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:08.758930" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:08.759481" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:08.759971" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.669368" elapsed="0.091564">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:08.666864" elapsed="0.094507">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.761970" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.761458" elapsed="0.000906"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:08.666844" elapsed="0.095582">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.763158" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.763359" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:08.763303" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:08.763278" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.763653" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.763752" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.664485" elapsed="0.099453">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.764048" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.544733" elapsed="0.219453">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.764568" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.764312" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:08.764289" elapsed="0.000415"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.764748" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.535553" elapsed="0.229377">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:48:08.765175" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.306736" elapsed="32.458576">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:47:36.286361" elapsed="32.479115">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.775610" elapsed="0.000029"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.775987" elapsed="0.000026"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.776186" elapsed="0.000023"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:48:08.775772" elapsed="0.000482"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.775702" elapsed="0.000580"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:48:08.777792" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:48:08.777474" elapsed="0.000363"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.778475" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.778004" elapsed="0.000500"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:08.797777" elapsed="0.000905"/>
</kw>
<msg time="2026-08-15T23:48:08.798942" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:08.797279" elapsed="0.001734"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:08.796853" elapsed="0.002239"/>
</kw>
<msg time="2026-08-15T23:48:08.799136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:08.787853" elapsed="0.011341"/>
</kw>
<msg time="2026-08-15T23:48:08.799297" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:08.787479" elapsed="0.011842"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.843780" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:08.843131" elapsed="0.000778"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:08.845558" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:08.845005" elapsed="0.000682">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:08.845873" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:08.844215" elapsed="0.001783"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.847526" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:08.846347" elapsed="0.001289"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:08.848366" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:08.848590" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:08.848152" elapsed="0.000543"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.849497" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.849008" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.851588" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.851324" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.852188" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.851918" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.853145" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:08.852659" elapsed="0.000513"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:08.854042" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.853734" elapsed="0.000336"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:08.854122" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:08.854278" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:08.853360" elapsed="0.000943"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.854454" elapsed="0.000228"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:08.852525" elapsed="0.002199"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.855287" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:08.854986" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:08.856074" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.855862" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:08.856152" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:08.856302" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:08.855494" elapsed="0.000833"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:08.856475" elapsed="0.000226"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:08.854855" elapsed="0.001888"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:08.852312" elapsed="0.004508"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:08.856889" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:48:08.857256" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:08.850528" elapsed="0.006817"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.849786" elapsed="0.007635"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.857752" elapsed="0.000110"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.857499" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.849763" elapsed="0.008252"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.859115" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:08.858164" elapsed="0.001059"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:08.859450" elapsed="0.000031"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:08.842139" elapsed="0.017463"/>
</kw>
<msg time="2026-08-15T23:48:08.859690" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:08.829048" elapsed="0.030705"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.872641" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.885169" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.897705" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.897915" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.898089" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.898500" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.898353" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:08.898337" elapsed="0.000244"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.898719" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.898907" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.899073" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:08.898307" elapsed="0.000819"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.898164" elapsed="0.000988"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.899294" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:08.899370" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:08.899489" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:08.824701" elapsed="0.074822"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.900666" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.900414" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:08.913182" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:08.913308" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:08.913444" 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-08-15T23:48:08.903183" elapsed="0.010299"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.900779" elapsed="0.012762"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.913880" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.913581" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.900760" elapsed="0.013241"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.919382" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.915683" elapsed="0.003763"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.915362" elapsed="0.004133"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.915336" elapsed="0.004195"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.923618" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:08.920062" elapsed="0.003625"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.919610" elapsed="0.004125"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.919587" elapsed="0.004184"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.924569" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:08.924034" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.925065" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.924706" elapsed="0.000441"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.926021" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:08.925400" elapsed="0.000659"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.925181" elapsed="0.000928"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.924680" elapsed="0.001459"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.926785" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:08.926356" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:08.927137" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:08.926905" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:08.927765" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:08.927374" elapsed="0.000418"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:08.927219" elapsed="0.000633"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:08.926887" elapsed="0.000988"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:08.928024" elapsed="0.000462"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:48:08.929044" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:08.928653" elapsed="0.000418"/>
</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-08-15T23:48:08.929223" elapsed="0.005905"/>
</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-08-15T23:48:08.914704" elapsed="0.020488"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:48:08.935240" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:08.937555" 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-08-15T23:48:08.899819" elapsed="0.037764"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:48:08.937638" elapsed="0.000027"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:48:08.799556" elapsed="0.138220"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:48:08.777001" elapsed="0.160854"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:48:08.776483" elapsed="0.161426"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:47:35.935682" elapsed="33.002314">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:47:35.935233" elapsed="33.002859">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:47:35.934868" elapsed="33.003287">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:47:35.934244" elapsed="33.004007">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:09.943070" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:09.942279" elapsed="0.000862"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:48:09.943259" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:48:09.943618" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:48:09.941366" elapsed="0.002312"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:09.970084" elapsed="0.001174"/>
</kw>
<msg time="2026-08-15T23:48:09.971403" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:09.969594" elapsed="0.001868"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:09.969200" elapsed="0.002346"/>
</kw>
<msg time="2026-08-15T23:48:09.971590" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:09.960406" elapsed="0.011231"/>
</kw>
<msg time="2026-08-15T23:48:09.971746" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:09.960070" elapsed="0.011703"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:09.972746" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:09.971974" elapsed="0.000803"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:09.973255" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:09.972898" elapsed="0.000426"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.007489" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.007091" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.008408" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.008108" elapsed="0.000379">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:10.008585" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:10.007742" elapsed="0.000868"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.009243" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:10.008846" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.009787" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:10.009986" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:10.009641" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.010495" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.010238" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.011596" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.011333" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.012120" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.011851" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.012827" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.012505" elapsed="0.000350"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.013589" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.013357" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.013666" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.013847" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.013041" elapsed="0.000833"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.014028" elapsed="0.000274"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:48:10.012373" elapsed="0.001971"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.014926" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.014596" elapsed="0.000357"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.015696" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.015471" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.015793" elapsed="0.000048"/>
</return>
<msg time="2026-08-15T23:48:10.015970" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.015139" elapsed="0.000857"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.016145" elapsed="0.000234"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:10.014462" elapsed="0.001958"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.016999" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.016674" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.017794" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.017583" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.017888" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:10.018040" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.017243" elapsed="0.000821"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.018228" elapsed="0.000389"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:48:10.016538" elapsed="0.002120"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.019258" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.018923" elapsed="0.000361"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.020037" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.019815" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.020114" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:10.020266" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.019470" elapsed="0.000821"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.020476" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:48:10.018773" elapsed="0.001971"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.021306" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.021005" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.022056" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.021843" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.022146" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.022298" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.021515" elapsed="0.000811"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.022476" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:48:10.020874" elapsed="0.001866"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.023300" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.023000" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.024088" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.023871" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.024166" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:10.024316" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.023506" 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-08-15T23:48:10.024488" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:48:10.022871" elapsed="0.001881"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.025316" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.025017" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.026114" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.025868" elapsed="0.000274"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.026193" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.026345" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.025524" elapsed="0.000845"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.026517" elapsed="0.000222"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:48:10.024883" elapsed="0.001896"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.027353" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.027049" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.028155" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.027941" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.028230" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.028383" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.027573" elapsed="0.000834"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.028553" elapsed="0.000228"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:10.026914" elapsed="0.001930"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:10.012194" elapsed="0.016691"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:10.028952" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.029120" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:10.011002" elapsed="0.018145"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.010668" elapsed="0.018513"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.029353" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.029206" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.010646" elapsed="0.018824"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.030609" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:10.029672" elapsed="0.000966"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:10.030740" elapsed="0.000071"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:10.006039" elapsed="0.025009"/>
</kw>
<msg time="2026-08-15T23:48:10.031141" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:09.992086" elapsed="0.039154"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.054112" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.077239" elapsed="0.000042"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.100959" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.101202" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.101396" 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-08-15T23:48:10.102006" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.101720" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:10.101704" elapsed="0.000473"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.102376" elapsed="0.000045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.102703" elapsed="0.000044"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.103052" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:10.101673" elapsed="0.001545"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.101534" elapsed="0.001743"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.103424" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.103576" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:48:10.103703" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:09.987519" elapsed="0.116210"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.131933" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.131539" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.132729" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.132500" elapsed="0.000320">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:10.132917" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:10.132168" elapsed="0.000773"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.133552" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:10.133163" elapsed="0.000421"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.133956" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:10.134098" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:10.133789" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.134722" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.134479" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:48:10.135212" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.134914" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.135742" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.135438" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.135296" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.134893" elapsed="0.000973"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.136778" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:10.136059" elapsed="0.000772"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:10.136930" elapsed="0.000054"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:10.130555" elapsed="0.006677"/>
</kw>
<msg time="2026-08-15T23:48:10.137321" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:10.117073" elapsed="0.020342"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.160242" elapsed="0.000034"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.182745" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.204966" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.205210" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.205403" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.206006" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.205713" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:10.205698" elapsed="0.000479"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.206376" elapsed="0.000044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.206700" elapsed="0.000044"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.207050" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:10.205666" elapsed="0.001550"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.205528" elapsed="0.001748"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.207424" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.207582" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:48:10.207716" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:10.114227" elapsed="0.093520"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.210416" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.209880" elapsed="0.000662">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:10.210677" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:10.208548" elapsed="0.002154"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.211312" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.210955" elapsed="0.000514"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.212652" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.211980" elapsed="0.000714"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.211497" elapsed="0.001276"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.210793" elapsed="0.002067"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.215788" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:10.213015" elapsed="0.002816"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:10.215974" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:48:10.216137" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:10.208161" elapsed="0.008002"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.218097" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.217582" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.218836" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.218329" elapsed="0.000584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.219567" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.219082" elapsed="0.000550"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.220506" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.219820" elapsed="0.000750"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:48:10.222141" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:48:10.221520" elapsed="0.000732"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:48:10.223141" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:48:10.222519" elapsed="0.000723"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.223506" elapsed="0.000581"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.225157" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.224385" elapsed="0.000973"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:48:10.225447" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:10.225732" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:48:10.220789" elapsed="0.004971"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:10.246473" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:48:10.246556" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:10.246936" 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-08-15T23:48:10.234323" elapsed="0.012706"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.225941" elapsed="0.021349"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.247763" elapsed="0.000212"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.247356" elapsed="0.000928"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.225920" elapsed="0.022420"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.257158" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.252181" elapsed="0.005042"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.251062" elapsed="0.006208"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.250989" elapsed="0.006349"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.260304" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.257900" elapsed="0.002471"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.257422" elapsed="0.002995"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.257392" elapsed="0.003092"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.262008" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:10.261011" elapsed="0.001095"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.262748" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.262266" elapsed="0.000602"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.263723" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.263273" elapsed="0.000486"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.262936" elapsed="0.000894"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.262233" elapsed="0.001666"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.265405" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:10.264404" elapsed="0.001100"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.266232" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.265632" elapsed="0.000695"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.267189" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.266727" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.266395" elapsed="0.000878"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.265600" elapsed="0.001738"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:10.267584" elapsed="0.000931"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:48:10.269435" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:10.268789" elapsed="0.000745"/>
</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-08-15T23:48:10.269794" elapsed="0.002795"/>
</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-08-15T23:48:10.249387" elapsed="0.023309"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:48:10.272945" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:48:10.272780" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.272761" elapsed="0.000319"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.273227" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.273334" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:10.275637" 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-08-15T23:48:10.216602" elapsed="0.059062"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:48:10.275728" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:48:10.275908" 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-08-15T23:48:09.976351" elapsed="0.299582"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.276264" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.276031" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.276014" elapsed="0.000342"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:48:10.276389" elapsed="0.000026"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:48:09.973591" elapsed="0.302918"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:09.973351" elapsed="0.303201"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:09.972875" elapsed="0.303699"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.276714" elapsed="0.000286"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:48:09.945333" elapsed="0.331732"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:48:09.944017" elapsed="0.333152"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.277782" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.277331" elapsed="0.000495"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:10.297598" elapsed="0.000783"/>
</kw>
<msg time="2026-08-15T23:48:10.298433" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:10.297236" elapsed="0.001249"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:10.296849" elapsed="0.001711"/>
</kw>
<msg time="2026-08-15T23:48:10.298602" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:10.288184" elapsed="0.010462"/>
</kw>
<msg time="2026-08-15T23:48:10.298749" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:10.287848" elapsed="0.010925"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.347963" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.347286" elapsed="0.000730"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.349162" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.348893" elapsed="0.000351">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:10.349455" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:10.348375" elapsed="0.001130"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.350562" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:10.349903" elapsed="0.000712"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.351417" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:10.351692" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:10.351126" elapsed="0.000615"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.352529" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.352123" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.406669" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.353648" elapsed="0.053122"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.407328" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.407019" elapsed="0.000336"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.408078" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.407748" elapsed="0.000357"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.408900" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.408657" elapsed="0.000270"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.409102" elapsed="0.000041"/>
</return>
<msg time="2026-08-15T23:48:10.409279" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.408318" elapsed="0.000987"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.409459" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:10.407611" elapsed="0.002132"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.410327" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:10.410013" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:10.411138" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.410918" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:10.411217" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.411372" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:10.410543" elapsed="0.000855"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:10.411549" elapsed="0.000227"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:10.409877" elapsed="0.001956"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:10.407413" elapsed="0.004457"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:10.411917" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:10.412083" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:10.353292" elapsed="0.058817"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.352860" elapsed="0.059342"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.412487" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.412271" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.352754" elapsed="0.059870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.413816" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:10.412968" elapsed="0.000899"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:10.414002" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:10.345658" elapsed="0.068586"/>
</kw>
<msg time="2026-08-15T23:48:10.414417" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:10.331476" elapsed="0.083001"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.427744" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.440839" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.453741" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.454001" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.454184" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.454722" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.454493" elapsed="0.000412"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:10.454475" elapsed="0.000512"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.455171" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.455497" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.455874" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:10.454438" elapsed="0.001645"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.454266" elapsed="0.001848"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.456263" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.456343" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:10.456470" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:10.327160" elapsed="0.129338"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.458177" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.457732" elapsed="0.000671">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:10.458591" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:10.457218" elapsed="0.001400"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.458973" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.458691" elapsed="0.000427"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.459915" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:10.459319" elapsed="0.000640"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:10.459147" elapsed="0.000923"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.458672" elapsed="0.001424"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.466849" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:10.460251" elapsed="0.006627"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:10.466930" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:10.467086" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:10.456887" elapsed="0.010224"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:10.468680" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.468306" elapsed="0.000579">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:10.469083" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:10.467758" elapsed="0.001351"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:10.469324" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:10.469185" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:10.469165" elapsed="0.000278"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.469594" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.469764" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.469860" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:10.472065" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:10.467437" elapsed="0.004655"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.473752" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.473288" elapsed="0.000527"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:10.474449" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:10.473969" elapsed="0.000525"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:10.489758" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:10.490154" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:10.490427" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.476794" elapsed="0.014427">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:10.474562" elapsed="0.016933">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.491768" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.491546" elapsed="0.000489"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:10.474544" elapsed="0.017531">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.492712" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.492956" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:10.492900" elapsed="0.000125"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:10.492875" elapsed="0.000182"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.493261" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.493365" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.472454" elapsed="0.021066">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.493632" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.304027" elapsed="0.189746">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:10.494212" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:10.493931" elapsed="0.000436"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:10.493907" elapsed="0.000496"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:10.494452" elapsed="0.000022"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.299552" elapsed="0.195049">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.552248" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:13.551593" elapsed="0.000713"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:13.553424" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.553151" elapsed="0.000353">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:13.553703" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:13.552667" elapsed="0.001083"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.554749" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:13.554145" elapsed="0.000692"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:13.555435" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:13.555701" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:13.555180" elapsed="0.000566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.556586" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:13.556226" elapsed="0.000457"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.557925" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:13.557604" elapsed="0.000367"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.558407" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:13.558131" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.559129" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:13.558822" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:13.559944" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:13.559661" elapsed="0.000309"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:13.560055" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:48:13.560224" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:13.559341" elapsed="0.000908"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:13.560403" elapsed="0.000245"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:13.558669" elapsed="0.002020"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.561262" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:13.560962" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:13.562019" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:13.561788" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:13.562096" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:13.562310" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:13.561471" elapsed="0.000865"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:13.562487" elapsed="0.000226"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:13.560829" elapsed="0.001925"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:13.558488" elapsed="0.004302"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:13.562851" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:13.563182" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:13.557275" elapsed="0.005934"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:13.556860" elapsed="0.006410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.563543" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:13.563331" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:13.556812" elapsed="0.006866"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.564843" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:13.564014" elapsed="0.000877"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:13.565026" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:13.549993" elapsed="0.015267"/>
</kw>
<msg time="2026-08-15T23:48:13.565432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:13.535308" elapsed="0.030179"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.578458" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.591199" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.604252" elapsed="0.000036"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.604552" elapsed="0.000030"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.604772" elapsed="0.000054"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.605353" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:13.605131" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:13.605114" elapsed="0.000467"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.605785" elapsed="0.000052"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.606203" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.606564" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:13.605077" elapsed="0.001696"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.604914" elapsed="0.001916"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.606985" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.607065" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:13.607213" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:13.530721" elapsed="0.076521"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:13.609071" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.608599" elapsed="0.000671">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:13.609453" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:13.608048" elapsed="0.001431"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.609844" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:13.609553" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.610706" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:13.610200" elapsed="0.000547"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:13.610017" elapsed="0.000964"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:13.609534" elapsed="0.001489"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.617823" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:13.611183" elapsed="0.006670"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:13.617917" elapsed="0.000046"/>
</return>
<msg time="2026-08-15T23:48:13.618104" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:13.607625" elapsed="0.010517"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:13.619938" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.619487" elapsed="0.000692">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:13.620363" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:13.618915" elapsed="0.001474"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:13.620604" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:13.620462" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:13.620443" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.620924" elapsed="0.000028"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.621151" elapsed="0.000036"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.621241" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:13.623542" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:13.618511" elapsed="0.005061"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.625507" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:13.624990" elapsed="0.000567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:13.626253" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:13.625712" elapsed="0.000589"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:13.718618" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:13.719221" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:13.719633" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.628683" elapsed="0.091938">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:13.626373" elapsed="0.094734">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.721563" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:13.721194" elapsed="0.000838"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:13.626354" elapsed="0.095746">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.723345" elapsed="0.000067"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.723687" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:13.723592" elapsed="0.000302"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:13.723549" elapsed="0.000382"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.724135" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.724236" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.624002" elapsed="0.100393">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.724503" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.504501" elapsed="0.220141">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:13.725114" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:13.724789" elapsed="0.000427"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:13.724761" elapsed="0.000490"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:13.725296" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:13.495777" elapsed="0.229661">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.780576" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:16.779956" elapsed="0.000676"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:16.781785" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.781489" elapsed="0.000408">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:16.782105" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:16.781013" elapsed="0.001137"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.783158" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:16.782502" elapsed="0.000705"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:16.783850" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:16.784128" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:16.783548" elapsed="0.000629"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.785096" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:16.784528" elapsed="0.000670"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.786481" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:16.786217" elapsed="0.000311"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.787043" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:16.786687" elapsed="0.000384"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.787744" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:16.787441" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:16.788556" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:16.788326" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:16.788639" elapsed="0.000040"/>
</return>
<msg time="2026-08-15T23:48:16.788834" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:16.788002" elapsed="0.000867"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:16.789027" elapsed="0.000245"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:16.787304" elapsed="0.002010"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.789950" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:16.789583" elapsed="0.000395"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:16.790709" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:16.790484" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:16.790788" elapsed="0.000047"/>
</return>
<msg time="2026-08-15T23:48:16.790981" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:16.790163" elapsed="0.000845"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:16.791160" elapsed="0.000407"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:16.789449" elapsed="0.002161"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:16.787126" elapsed="0.004521"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:16.791693" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:16.791876" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:16.785875" elapsed="0.006039"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:16.785361" elapsed="0.006620"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.792257" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:16.792043" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:16.785313" elapsed="0.007138"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.793662" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:16.792823" elapsed="0.000889"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:16.793867" elapsed="0.000082"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:16.778295" elapsed="0.015827"/>
</kw>
<msg time="2026-08-15T23:48:16.794293" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:16.763494" elapsed="0.030857"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.807518" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.820488" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.833381" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.833594" 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-08-15T23:48:16.833778" elapsed="0.000040"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.834294" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:16.834076" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:16.834060" elapsed="0.000463"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.834712" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.835058" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.835410" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:16.834025" elapsed="0.001594"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.833881" elapsed="0.001771"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.835824" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.835909" elapsed="0.000020"/>
</return>
<msg time="2026-08-15T23:48:16.836046" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:16.759057" elapsed="0.077064"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:16.837881" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.837418" elapsed="0.000668">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:16.838270" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:16.836872" elapsed="0.001425"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.838641" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:16.838372" elapsed="0.000411"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.839530" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:16.839028" elapsed="0.000543"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:16.838843" elapsed="0.000849"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:16.838352" elapsed="0.001367"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.846448" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:16.839981" elapsed="0.006495"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:16.846530" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:16.846688" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:16.836495" elapsed="0.010224"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:16.848329" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.847951" elapsed="0.000564">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:16.848697" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:16.847425" elapsed="0.001297"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:16.848977" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:48:16.848833" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:16.848788" elapsed="0.000276"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.849228" elapsed="0.000025"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.849402" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.849471" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:16.851769" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:16.847097" elapsed="0.004721"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.853549" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:16.853055" elapsed="0.000543"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:16.854253" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:16.853754" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:16.976929" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:16.977506" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:16.978129" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.856666" elapsed="0.122474">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:16.854371" elapsed="0.125220">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.980127" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:16.979678" elapsed="0.000860"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:16.854352" elapsed="0.126253">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.981912" elapsed="0.000082"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.982271" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:16.982173" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:16.982130" elapsed="0.000294"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.982754" elapsed="0.000094"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.982970" elapsed="0.000048"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.852192" elapsed="0.131047">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.983417" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.735501" elapsed="0.248143">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:16.984332" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:16.983907" elapsed="0.000592"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:16.983864" elapsed="0.000691"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:16.984628" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:16.726557" elapsed="0.258399">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.043701" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:20.043091" elapsed="0.000665"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:20.044899" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:20.044604" elapsed="0.000375">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:20.045179" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:20.044128" elapsed="0.001097"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.046248" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:20.045567" elapsed="0.000727"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:20.047051" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:20.047306" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:20.046707" elapsed="0.000645"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.048069" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:20.047686" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.049411" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:20.049152" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.049902" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:20.049614" elapsed="0.000315"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.050596" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:20.050295" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:20.051376" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:20.051152" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:20.051454" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:20.051618" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:20.050828" elapsed="0.000815"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:20.051794" elapsed="0.000316"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:20.050160" elapsed="0.001990"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.052714" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:20.052399" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:20.053468" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:20.053255" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:20.053543" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:20.053694" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:20.052942" elapsed="0.000776"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:20.053881" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:20.052267" elapsed="0.001879"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:20.049983" elapsed="0.004198"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:20.054226" elapsed="0.000195"/>
</return>
<msg time="2026-08-15T23:48:20.054557" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:20.048760" elapsed="0.005823"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:20.048322" elapsed="0.006318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.054936" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:20.054701" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:20.048277" elapsed="0.006795"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.056182" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:20.055377" elapsed="0.000853"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:20.056361" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:20.041494" elapsed="0.015132"/>
</kw>
<msg time="2026-08-15T23:48:20.056820" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:20.026854" elapsed="0.030024"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.070048" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.082841" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.095543" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.095740" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.095937" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.096421" elapsed="0.000094"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:20.096205" elapsed="0.000390"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:20.096189" elapsed="0.000483"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.096876" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.097193" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.097541" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:20.096156" elapsed="0.001579"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.096016" elapsed="0.001749"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.097929" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.098008" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:20.098135" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:20.022450" elapsed="0.075713"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:20.099791" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:20.099398" elapsed="0.000626">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:20.100205" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:20.098884" elapsed="0.001347"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.100616" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:20.100304" elapsed="0.000453"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.101493" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:20.100989" elapsed="0.000545"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:20.100786" elapsed="0.000859"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:20.100285" elapsed="0.001385"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.108289" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:20.101884" elapsed="0.006433"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:20.108371" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:20.108557" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:20.098526" elapsed="0.010057"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:20.110148" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:20.109762" elapsed="0.000570">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:20.110514" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:20.109274" elapsed="0.001266"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:20.110750" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:20.110612" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:20.110593" elapsed="0.000265"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.111005" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.111174" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.111240" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:20.113500" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:20.108947" elapsed="0.004581"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.115216" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:20.114730" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:20.115914" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:20.115417" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:20.217011" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:20.217585" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:20.218074" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:20.118358" elapsed="0.100743">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:20.116049" elapsed="0.103524">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.220142" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:20.219666" elapsed="0.000916"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:20.116028" elapsed="0.104621">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.221904" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.222223" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:20.222133" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:20.222093" elapsed="0.000275"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.222691" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.222921" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:20.113914" elapsed="0.109258">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.223349" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:19.996699" elapsed="0.226874">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:20.224283" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:20.223780" elapsed="0.000671"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:20.223742" elapsed="0.000763"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:20.224577" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:19.986094" elapsed="0.238777">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.285727" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:23.285113" elapsed="0.000671"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:23.286930" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.286619" elapsed="0.000387">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:23.287212" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:23.286167" elapsed="0.001092"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.288267" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:23.287631" elapsed="0.000684"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:23.289036" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:23.289298" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:23.288653" elapsed="0.000690"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.290056" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:23.289676" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.291363" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:23.291101" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.291952" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:23.291654" elapsed="0.000325"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.292650" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:23.292346" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:23.293475" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:23.293250" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:23.293555" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:48:23.293718" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:23.292932" elapsed="0.000812"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:23.293911" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:23.292212" elapsed="0.001987"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.294749" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:23.294447" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:23.295529" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:23.295289" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:23.295606" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:23.295756" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:23.294976" elapsed="0.000805"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:23.295947" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:23.294317" elapsed="0.001895"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:23.292034" elapsed="0.004214"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:23.296292" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:23.296449" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:23.290714" elapsed="0.005760"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:23.290312" elapsed="0.006222"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.296827" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:23.296595" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:23.290265" elapsed="0.006701"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.298124" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:23.297266" elapsed="0.000906"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:23.298308" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:23.283374" elapsed="0.015174"/>
</kw>
<msg time="2026-08-15T23:48:23.298722" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:23.266557" elapsed="0.032220"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.312041" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.328670" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.341642" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.341863" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.342041" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.342515" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:23.342302" elapsed="0.000356"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:23.342286" elapsed="0.000448"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.342935" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.343246" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.343609" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:23.342255" elapsed="0.001565"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.342118" elapsed="0.001733"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.343997" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.344074" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:23.344196" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:23.262155" elapsed="0.082071"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:23.345838" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.345427" elapsed="0.000599">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:23.346203" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:23.344930" elapsed="0.001299"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.346546" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:23.346301" elapsed="0.000381"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.347435" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:23.346905" elapsed="0.000573"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:23.346710" elapsed="0.000877"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:23.346282" elapsed="0.001330"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.356628" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:23.347764" elapsed="0.008903"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:23.356741" elapsed="0.000042"/>
</return>
<msg time="2026-08-15T23:48:23.357040" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:23.344582" elapsed="0.012493"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:23.359412" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.358746" elapsed="0.000926">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:23.359949" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:23.358059" elapsed="0.001926"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:23.360257" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:23.360086" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:23.360059" elapsed="0.000282"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.360485" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.360653" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.360720" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:23.362858" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:23.357586" elapsed="0.005301"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.364593" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:23.364136" elapsed="0.000506"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:23.365268" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:23.364793" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:23.456782" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:23.457383" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:23.457840" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.367636" elapsed="0.091122">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:23.365384" elapsed="0.093849">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.459729" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:23.459367" elapsed="0.000865"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:23.365365" elapsed="0.094938">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.461414" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.461729" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:23.461643" elapsed="0.000246"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:23.461603" elapsed="0.000338"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.462265" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.462422" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.363255" elapsed="0.099412">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.462951" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.234757" elapsed="0.228423">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:23.464022" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:23.463460" elapsed="0.000758"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:23.463420" elapsed="0.000856"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:23.464352" elapsed="0.000036"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:23.225992" elapsed="0.238591">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.520450" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:26.519844" elapsed="0.000662"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:26.521620" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.521348" elapsed="0.000350">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:26.521931" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:26.520892" elapsed="0.001085"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.522942" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:26.522314" elapsed="0.000677"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:26.523581" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:26.523973" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:26.523330" elapsed="0.000690"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.524715" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:26.524354" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.526082" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:26.525754" elapsed="0.000375"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.526557" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:26.526288" elapsed="0.000295"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.527263" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:26.526961" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:26.528080" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:26.527852" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:26.528160" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:48:26.528323" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:26.527476" elapsed="0.000873"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:26.528559" elapsed="0.000274"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:26.526825" elapsed="0.002051"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.529434" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:26.529127" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:26.530198" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:26.529982" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:26.530276" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:26.530434" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:26.529646" elapsed="0.000813"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:26.530608" elapsed="0.000238"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:26.528994" elapsed="0.001893"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:26.526634" elapsed="0.004290"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:26.530969" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:26.531129" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:26.525422" elapsed="0.005734"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:26.525015" elapsed="0.006201"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.531486" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:26.531277" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:26.524970" elapsed="0.006651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.532954" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:26.531945" elapsed="0.001058"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:26.533139" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:26.518257" elapsed="0.015125"/>
</kw>
<msg time="2026-08-15T23:48:26.533550" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:26.503615" elapsed="0.029990"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.546590" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.559331" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.572075" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.572313" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.572488" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.573009" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:26.572773" elapsed="0.000380"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:26.572755" elapsed="0.000474"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.573406" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.573722" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.574096" elapsed="0.000027"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:26.572702" elapsed="0.001592"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.572563" elapsed="0.001761"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.574470" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.574547" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:26.574669" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:26.499037" elapsed="0.075659"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:26.576324" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.575948" elapsed="0.000571">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:26.576706" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:26.575424" elapsed="0.001324"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.577146" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:26.576892" elapsed="0.000403"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.578084" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:26.577516" elapsed="0.000609"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:26.577323" elapsed="0.000916"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:26.576866" elapsed="0.001400"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.584867" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:26.578421" elapsed="0.006475"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:26.584948" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:26.585105" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:26.575084" elapsed="0.010047"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:26.586702" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.586331" elapsed="0.000571">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:26.587088" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:26.585781" elapsed="0.001335"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:26.587326" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:26.587189" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:26.587169" elapsed="0.000242"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.587594" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.587763" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.587903" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:26.590094" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:26.585458" elapsed="0.004664"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.591827" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:26.591327" elapsed="0.000550"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:26.592481" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:26.592030" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:26.685647" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:26.686252" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:26.686655" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.594892" elapsed="0.092732">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:26.592595" elapsed="0.095533">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.688566" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:26.688216" elapsed="0.000820"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:26.592576" elapsed="0.096530">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.690380" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.690703" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:26.690613" elapsed="0.000299"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:26.690572" elapsed="0.000432"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.691340" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.691504" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.590485" elapsed="0.101270">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.692076" elapsed="0.000043"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.473731" elapsed="0.218583">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:26.693044" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:26.692524" elapsed="0.000770"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:26.692484" elapsed="0.000880"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:26.693453" elapsed="0.000029"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:26.465715" elapsed="0.227878">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.749634" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:29.749012" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:29.750830" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.750541" elapsed="0.000368">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:29.751109" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:29.750086" elapsed="0.001069"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.752266" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:29.751499" elapsed="0.000817"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:29.752923" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:29.753185" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:29.752656" elapsed="0.000575"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.753971" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:29.753560" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.755229" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:29.754969" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.755732" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:29.755436" elapsed="0.000323"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.756510" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:29.756209" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:29.757282" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:29.757058" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:29.757361" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:29.757525" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:29.756723" elapsed="0.000828"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:29.757700" elapsed="0.000279"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:29.756073" elapsed="0.001947"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.758567" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:29.758267" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:29.759322" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:29.759109" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:29.759399" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:29.759555" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:29.758774" elapsed="0.000807"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:29.759752" elapsed="0.000302"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:29.758136" elapsed="0.001960"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:29.755890" elapsed="0.004242"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:29.760177" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:48:29.760333" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:29.754626" elapsed="0.005733"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:29.754225" elapsed="0.006192"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.760687" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:29.760477" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:29.754180" elapsed="0.006666"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.762147" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:29.761149" elapsed="0.001047"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:29.762327" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:29.747329" elapsed="0.015236"/>
</kw>
<msg time="2026-08-15T23:48:29.762734" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:29.732713" elapsed="0.030075"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.775705" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.788892" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.801529" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.801731" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.801927" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.802415" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:29.802197" elapsed="0.000362"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:29.802180" elapsed="0.000458"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.802848" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.803167" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.803525" elapsed="0.000092"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:29.802149" elapsed="0.001665"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.802006" elapsed="0.001841"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.804001" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.804081" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:29.804210" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:29.728363" elapsed="0.075875"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:29.805905" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.805477" elapsed="0.000625">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:29.806299" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:29.804964" elapsed="0.001373"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.806668" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:29.806415" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.807538" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:29.807038" elapsed="0.000541"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:29.806858" elapsed="0.000857"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:29.806394" elapsed="0.001347"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.814461" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:29.807954" elapsed="0.006536"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:29.814543" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:29.814703" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:29.804606" elapsed="0.010123"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:29.816387" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.816001" elapsed="0.000578">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:29.816763" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:29.815432" elapsed="0.001357"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:29.817024" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:29.816883" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:29.816863" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.817255" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.817422" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.817488" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:29.819734" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:29.815100" elapsed="0.004662"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.821491" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:29.820988" elapsed="0.000556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:29.822177" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:29.821697" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:29.913021" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:29.913569" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:29.914063" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.824588" elapsed="0.090581">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:29.822332" elapsed="0.093330">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.916177" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:29.915753" elapsed="0.000816"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:29.822312" elapsed="0.094319">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.917723" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.918107" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:29.918021" elapsed="0.000179"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:29.917980" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.918563" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.918719" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.820150" elapsed="0.098851">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.919175" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.703372" elapsed="0.216024">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:29.920117" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:29.919655" elapsed="0.000627"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:29.919612" elapsed="0.000724"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:29.920461" elapsed="0.000040"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:29.694686" elapsed="0.226015">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.977168" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:32.976533" elapsed="0.000689"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:32.978372" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:32.978117" elapsed="0.000329">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:32.978647" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:32.977632" elapsed="0.001063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.979708" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:32.979057" elapsed="0.000700"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:32.980368" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:32.980623" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:32.980119" elapsed="0.000552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.981527" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:32.981162" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.982784" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:32.982524" elapsed="0.000368"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.983323" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:32.983052" elapsed="0.000298"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.984050" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:32.983732" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:32.984852" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:32.984580" elapsed="0.000300"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:32.984933" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:48:32.985096" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:32.984262" elapsed="0.000860"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:32.985273" elapsed="0.000236"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:32.983594" elapsed="0.001956"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.986117" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:32.985816" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:32.986868" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:32.986636" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:32.986945" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:32.987095" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:32.986325" elapsed="0.000795"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:32.987268" elapsed="0.000247"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:32.985666" elapsed="0.001897"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:32.983402" elapsed="0.004197"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:32.987642" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:32.987814" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:32.982196" elapsed="0.005646"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:32.981779" elapsed="0.006121"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:32.988168" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:32.987960" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:32.981732" elapsed="0.006569"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:32.989605" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:32.988602" elapsed="0.001092"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:32.989846" elapsed="0.000080"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:32.974938" elapsed="0.015151"/>
</kw>
<msg time="2026-08-15T23:48:32.990256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:32.960581" elapsed="0.029730"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.003061" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.015709" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.028473" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.028668" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.028860" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.029337" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:33.029117" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:33.029101" elapsed="0.000459"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.029736" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.030077" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.030428" elapsed="0.000025"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:33.029071" elapsed="0.001559"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.028937" elapsed="0.001722"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.030828" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.030907" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:33.031027" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:32.956299" elapsed="0.074755"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:33.032744" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:33.032314" elapsed="0.000654">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:33.033148" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:33.031789" elapsed="0.001385"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.033492" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:33.033247" elapsed="0.000383"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:33.034357" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:33.033856" elapsed="0.000541"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:33.033659" elapsed="0.000846"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:33.033227" elapsed="0.001303"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:33.041268" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:33.034686" elapsed="0.006612"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:33.041355" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:48:33.041520" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:33.031449" elapsed="0.010097"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:33.043223" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:33.042757" elapsed="0.000655">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:33.043633" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:33.042245" elapsed="0.001414"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:33.043898" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:33.043734" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:33.043714" elapsed="0.000270"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.044130" elapsed="0.000021"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.044298" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.044365" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:33.046532" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:33.041908" elapsed="0.004652"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:33.048311" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:33.047845" elapsed="0.000515"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:33.048990" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:33.048513" elapsed="0.000524"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:33.146061" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:33.146585" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:33.147035" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:33.051350" elapsed="0.096665">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:33.049105" elapsed="0.099435">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.149054" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:33.148626" elapsed="0.000817"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:33.049086" elapsed="0.100421">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.150599" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.150992" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:33.150900" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:33.150784" elapsed="0.000354"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.151461" elapsed="0.000131"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.151707" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:33.046962" elapsed="0.105041">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.152178" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:32.930302" elapsed="0.222101">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:33.152920" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:33.152609" elapsed="0.000413"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:33.152572" elapsed="0.000484"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:33.153101" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:32.921692" elapsed="0.231552">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.212724" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:36.212115" elapsed="0.000663"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:36.213891" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.213597" elapsed="0.000375">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:36.214172" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:36.213152" elapsed="0.001064"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.215335" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:36.214553" elapsed="0.000830"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:36.216018" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:36.216358" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:36.215725" elapsed="0.000682"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.217175" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:36.216744" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.218481" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:36.218205" elapsed="0.000323"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.219051" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:36.218688" elapsed="0.000391"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.219754" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:36.219446" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:36.220588" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:36.220362" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:36.220669" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:36.220861" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:36.220030" elapsed="0.000857"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:36.221041" elapsed="0.000248"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:36.219311" elapsed="0.002018"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.221926" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:36.221580" elapsed="0.000373"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:36.222686" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:36.222469" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:36.222765" elapsed="0.000051"/>
</return>
<msg time="2026-08-15T23:48:36.222947" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:36.222139" elapsed="0.000834"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:36.223124" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:36.221448" elapsed="0.001942"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:36.219131" elapsed="0.004295"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:36.223470" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:36.223634" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:36.217859" elapsed="0.005802"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:36.217431" elapsed="0.006290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.224124" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:36.223782" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:36.217385" elapsed="0.006898"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.225419" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:36.224593" elapsed="0.000875"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:36.225601" elapsed="0.000083"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:36.210483" elapsed="0.015396"/>
</kw>
<msg time="2026-08-15T23:48:36.226049" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:36.196168" elapsed="0.029945"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.239373" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.252563" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.265361" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.265559" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.265734" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.266234" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:36.266016" elapsed="0.000362"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:36.266000" elapsed="0.000457"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.266637" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.266978" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.267329" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:36.265968" elapsed="0.001560"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.265827" elapsed="0.001731"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.267706" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.267793" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:48:36.267940" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:36.191862" elapsed="0.076107"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:36.269637" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.269260" elapsed="0.000628">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:36.270068" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:36.268738" elapsed="0.001355"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.270408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:36.270164" elapsed="0.000410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.271329" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:36.270778" elapsed="0.000591"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:36.270604" elapsed="0.000872"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:36.270146" elapsed="0.001356"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.278043" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:36.271652" elapsed="0.006419"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:36.278123" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:36.278278" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:36.268410" elapsed="0.009893"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:36.279870" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.279484" elapsed="0.000583">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:36.280247" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:36.278998" elapsed="0.001274"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:36.280480" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:36.280344" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:36.280325" elapsed="0.000238"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.280707" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.280900" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.280968" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:36.283159" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:36.278627" elapsed="0.004560"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.284879" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:36.284405" elapsed="0.000522"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:36.285525" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:36.285078" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:36.378858" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:36.379412" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:36.379909" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.287902" elapsed="0.093055">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:36.285639" elapsed="0.095773">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.381978" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:36.381502" elapsed="0.000870"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:36.285621" elapsed="0.096817">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.383563" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.384179" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:36.384068" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:36.383978" elapsed="0.000354"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.384663" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.384884" elapsed="0.000040"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.283546" elapsed="0.101596">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.385313" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.165362" elapsed="0.220170">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:36.386198" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:36.385734" elapsed="0.000636"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:36.385697" elapsed="0.000737"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:36.386510" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:36.154348" elapsed="0.232389">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.444037" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:39.443394" elapsed="0.000699"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:39.445259" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.444942" elapsed="0.000398">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:39.445544" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:39.444452" elapsed="0.001138"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.446563" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:39.445962" elapsed="0.000648"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:39.447340" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:39.447655" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:39.447087" elapsed="0.000615"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.448416" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:39.448054" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.449735" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:39.449475" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.450390" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:39.450112" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.451192" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:39.450786" elapsed="0.000434"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:39.452017" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:39.451731" elapsed="0.000313"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:39.452097" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:39.452264" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:39.451408" elapsed="0.000882"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:39.452441" elapsed="0.000284"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:39.450652" elapsed="0.002121"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.453372" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:39.453070" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:39.454126" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:39.453911" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:39.454203" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:39.454354" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:39.453580" elapsed="0.000800"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:39.454527" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:39.452936" elapsed="0.001853"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:39.450472" elapsed="0.004368"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:39.454891" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:39.455049" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:39.449150" elapsed="0.005925"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:39.448671" elapsed="0.006461"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.455405" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:39.455194" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:39.448625" elapsed="0.006914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.456854" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:39.455863" elapsed="0.001041"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:39.457071" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:39.441788" elapsed="0.015520"/>
</kw>
<msg time="2026-08-15T23:48:39.457477" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:39.427256" elapsed="0.030277"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.470563" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.483612" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.496765" elapsed="0.000057"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.497025" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.497204" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.497707" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:39.497488" elapsed="0.000388"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:39.497469" elapsed="0.000486"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.498132" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.498448" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.498794" elapsed="0.000038"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:39.497434" elapsed="0.001576"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.497284" elapsed="0.001757"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.499189" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.499266" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:39.499401" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:39.422598" elapsed="0.076831"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:39.501149" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.500693" elapsed="0.000654">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:39.501530" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:39.500168" elapsed="0.001387"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.501908" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:39.501628" elapsed="0.000419"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.502749" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:39.502254" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:39.502075" elapsed="0.000897"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:39.501609" elapsed="0.001388"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.509623" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:39.503150" elapsed="0.006501"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:39.509706" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:39.509883" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:39.499822" elapsed="0.010088"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:39.511557" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.511177" elapsed="0.000592">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:39.512059" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:39.510589" elapsed="0.001497"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:39.512327" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:48:39.512162" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:39.512141" elapsed="0.000273"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.512560" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.512730" elapsed="0.000169"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.512965" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:39.515341" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:39.510258" elapsed="0.005111"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.517219" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:39.516690" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:39.517897" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:39.517422" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:39.609719" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:39.610344" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:39.610922" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.520261" elapsed="0.091689">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:39.518013" elapsed="0.094402">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.612965" elapsed="0.000072"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:39.612508" elapsed="0.000873"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:39.517994" elapsed="0.095451">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.614689" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.615073" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:39.614984" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:39.614941" elapsed="0.000276"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.615538" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.615694" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.515787" elapsed="0.100199">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.616162" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.396583" elapsed="0.219998">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:39.617317" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:39.616880" elapsed="0.000606"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:39.616785" elapsed="0.000756"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:39.617617" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:39.387907" elapsed="0.229983">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.673009" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:42.672364" elapsed="0.000701"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:42.674169" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.673893" elapsed="0.000355">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:42.674448" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:42.673417" elapsed="0.001075"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.675469" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:42.674837" elapsed="0.000680"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:42.676257" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:42.676554" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:42.676004" elapsed="0.000600"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.677323" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.676959" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.678649" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.678389" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.679145" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.678872" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.679841" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:42.679539" elapsed="0.000400"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:42.680693" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.680440" elapsed="0.000279"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:42.680772" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:48:42.680956" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:42.680125" elapsed="0.000856"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.681133" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:42.679406" elapsed="0.002010"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.682050" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:42.681660" elapsed="0.000417"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:42.682786" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.682575" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:42.682882" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:42.683035" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:42.682261" elapsed="0.000799"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.683214" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:42.681532" elapsed="0.001945"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:42.679226" elapsed="0.004286"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:42.683555" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:42.683712" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:42.678060" elapsed="0.005678"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:42.677580" elapsed="0.006221"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.684093" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.683884" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:42.677533" elapsed="0.006694"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.685570" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:42.684524" elapsed="0.001104"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:42.685766" elapsed="0.000101"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:42.670711" elapsed="0.015321"/>
</kw>
<msg time="2026-08-15T23:48:42.686203" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:42.656120" elapsed="0.030139"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.702340" elapsed="0.000060"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.715151" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.727762" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.728006" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.728187" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.728779" elapsed="0.000089"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.728556" elapsed="0.000395"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:42.728538" elapsed="0.000495"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.729217" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.729533" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.729907" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:42.728496" elapsed="0.001609"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.728345" elapsed="0.001791"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.730284" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.730364" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:42.730519" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:42.651720" elapsed="0.078828"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:42.732343" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.731915" elapsed="0.000632">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:42.732732" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:42.731328" elapsed="0.001429"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.733125" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.732834" elapsed="0.000429"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.734056" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:42.733471" elapsed="0.000629"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:42.733291" elapsed="0.000934"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:42.732815" elapsed="0.001437"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.740895" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:42.734403" elapsed="0.006520"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:42.740976" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:42.741134" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:42.730942" elapsed="0.010217"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:42.742715" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.742345" elapsed="0.000577">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:42.743105" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:42.741811" elapsed="0.001320"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:42.743341" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:42.743204" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:42.743185" elapsed="0.000240"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.743572" elapsed="0.000038"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.743760" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.743878" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:42.746073" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:42.741487" elapsed="0.004618"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.747931" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.747346" elapsed="0.000638"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.748612" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.748143" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:42.841382" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:42.841970" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:42.842376" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.751019" elapsed="0.092305">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:42.748732" elapsed="0.095028">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.844266" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.843897" elapsed="0.000778"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:42.748712" elapsed="0.096026">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.845811" elapsed="0.000172"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.846240" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:42.846151" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:42.846111" elapsed="0.000272"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.846705" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.846924" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.746470" elapsed="0.100705">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.847345" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.627065" elapsed="0.220502">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.848218" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.847773" elapsed="0.000607"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:42.847735" elapsed="0.000698"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.848505" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.619299" elapsed="0.229485">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:48:42.849151" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.298954" elapsed="32.550334">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:48:10.277966" elapsed="32.571440">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.858036" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.858378" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.858561" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:48:42.858188" elapsed="0.000438"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.858123" elapsed="0.000530"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:48:42.860131" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:48:42.859845" elapsed="0.000314"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.860764" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.860323" elapsed="0.000468"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:42.879805" elapsed="0.000846"/>
</kw>
<msg time="2026-08-15T23:48:42.880903" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:42.879439" elapsed="0.001535"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:42.879021" elapsed="0.002030"/>
</kw>
<msg time="2026-08-15T23:48:42.881094" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:42.870026" elapsed="0.011124"/>
</kw>
<msg time="2026-08-15T23:48:42.881252" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:42.869655" elapsed="0.011621"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.925680" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:42.925034" elapsed="0.000757"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:42.927408" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:42.926899" elapsed="0.000623">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:42.927647" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:42.926121" elapsed="0.001632"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.929264" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:42.928141" elapsed="0.001231"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:42.930123" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:42.930347" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:42.929754" elapsed="0.000697"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.931264" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.930748" elapsed="0.000580"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.933347" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.933081" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.933955" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.933594" elapsed="0.000389"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.934930" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:42.934435" elapsed="0.000522"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:42.935720" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.935495" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:42.935801" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:48:42.936036" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:42.935146" elapsed="0.000915"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.936212" elapsed="0.000237"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:42.934298" elapsed="0.002193"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.937079" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:42.936740" elapsed="0.000365"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:42.937868" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:42.937631" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:42.937945" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:42.938096" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:42.937286" 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-08-15T23:48:42.938268" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:42.936607" elapsed="0.001922"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:42.934082" elapsed="0.004502"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:42.938650" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:48:42.939043" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:42.932253" elapsed="0.006883"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:42.931502" elapsed="0.007710"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.939509" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.939290" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:42.931480" elapsed="0.008265"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.940877" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:42.939914" elapsed="0.001109"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:42.941251" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:42.924011" elapsed="0.017388"/>
</kw>
<msg time="2026-08-15T23:48:42.941487" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:42.910912" elapsed="0.030638"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.954251" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.966867" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.979524" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.979724" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.979913" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.980330" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.980183" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:42.980167" elapsed="0.000243"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.980547" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.980709" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.980896" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:42.980137" elapsed="0.000820"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.979989" elapsed="0.000994"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.981125" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:42.981200" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:42.981319" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:42.906491" elapsed="0.074854"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:42.982549" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.982298" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:42.994866" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:42.994975" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:42.995106" 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-08-15T23:48:42.984979" elapsed="0.010164"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:42.982661" elapsed="0.012537"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:42.995446" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:42.995236" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:42.982643" elapsed="0.012955"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:43.000938" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:42.997283" elapsed="0.003718"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:42.996971" elapsed="0.004078"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:42.996946" elapsed="0.004139"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:43.005085" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:43.001469" elapsed="0.003684"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:43.001163" elapsed="0.004036"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:43.001139" elapsed="0.004095"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:43.006026" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:43.005464" elapsed="0.000600"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:43.006488" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:43.006162" elapsed="0.000405"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:43.007415" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:43.006826" elapsed="0.000626"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:43.006602" elapsed="0.000899"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:43.006136" elapsed="0.001396"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:43.008313" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:43.007748" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:43.008768" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:43.008447" elapsed="0.000433"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:43.009694" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:43.009138" elapsed="0.000594"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:43.008917" elapsed="0.000863"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:43.008422" elapsed="0.001394"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:43.010045" elapsed="0.000643"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:48:43.011447" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:43.010949" elapsed="0.000536"/>
</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-08-15T23:48:43.011695" elapsed="0.006235"/>
</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-08-15T23:48:42.996333" elapsed="0.021661"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:48:43.018039" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:43.020348" 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-08-15T23:48:42.981675" elapsed="0.038700"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:48:43.020429" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:48:42.881494" elapsed="0.139057"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:48:42.859334" elapsed="0.161284"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:48:42.858868" elapsed="0.161832"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:48:09.940401" elapsed="33.080382">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:48:09.939990" elapsed="33.080916">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:48:09.939559" elapsed="33.081411">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:48:09.939027" elapsed="33.082038">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.025973" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.025176" elapsed="0.000881"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:48:44.026183" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:48:44.026556" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:48:44.024305" elapsed="0.002435"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.053122" elapsed="0.000877"/>
</kw>
<msg time="2026-08-15T23:48:44.054139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.052638" elapsed="0.001560"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.052247" elapsed="0.002027"/>
</kw>
<msg time="2026-08-15T23:48:44.054317" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.043386" elapsed="0.010976"/>
</kw>
<msg time="2026-08-15T23:48:44.054464" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.043009" elapsed="0.011480"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.055409" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.054651" elapsed="0.000787"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.055903" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.055534" elapsed="0.000438"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.090392" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.090004" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.091380" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.091002" elapsed="0.000459">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:44.091557" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:44.090636" elapsed="0.000946"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.092225" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.091802" elapsed="0.000451"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.092740" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:44.092923" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:44.092595" elapsed="0.000354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.093452" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.093199" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.094549" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.094286" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.095091" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.094795" elapsed="0.000323"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.095777" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.095479" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.096550" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.096328" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.096626" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:44.096782" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.096013" elapsed="0.000799"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.096989" elapsed="0.000247"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:48:44.095348" elapsed="0.001952"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.097880" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.097550" elapsed="0.000358"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.098613" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.098403" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.098688" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:44.098855" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.098090" elapsed="0.000791"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.099029" elapsed="0.000227"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:44.097419" elapsed="0.001878"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.099852" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.099538" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.100604" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.100387" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.100678" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:44.100831" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.100060" elapsed="0.000810"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.101018" elapsed="0.000443"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:48:44.099409" elapsed="0.002096"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.102079" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.101755" elapsed="0.000350"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.102822" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.102608" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.102913" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:44.103065" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.102293" elapsed="0.000796"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.103287" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:48:44.101623" elapsed="0.001929"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.104117" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.103796" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.104863" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.104636" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.104940" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:44.105091" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.104323" elapsed="0.000793"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.105264" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:48:44.103666" elapsed="0.001862"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.106104" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.105786" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.106852" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.106624" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.106929" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:44.107081" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.106312" elapsed="0.000794"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.107253" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:48:44.105656" elapsed="0.001860"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.108075" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.107757" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.108804" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.108592" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.108895" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:44.109046" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.108281" elapsed="0.000789"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.109222" elapsed="0.000221"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:48:44.107628" elapsed="0.001855"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.110078" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.109759" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.110842" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.110612" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.110918" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:44.111068" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.110284" elapsed="0.000808"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.111240" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:44.109596" elapsed="0.001904"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:44.095171" elapsed="0.016364"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:44.111577" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:44.111738" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:44.093963" elapsed="0.017801"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.093619" elapsed="0.018181"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.111990" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.111825" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.093597" elapsed="0.018506"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.113210" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:44.112303" elapsed="0.000937"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:44.113339" elapsed="0.000054"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:44.088599" elapsed="0.025023"/>
</kw>
<msg time="2026-08-15T23:48:44.113715" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.074756" elapsed="0.039060"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.136446" elapsed="0.000042"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.158871" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.181064" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.181322" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.181520" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.182147" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.181873" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:44.181833" elapsed="0.000488"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.182524" elapsed="0.000044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.182879" elapsed="0.000046"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.183208" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:44.181789" elapsed="0.001585"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.181648" elapsed="0.001789"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.183587" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.183740" elapsed="0.000020"/>
</return>
<msg time="2026-08-15T23:48:44.183916" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:44.070217" elapsed="0.113728"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.212655" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.212268" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.213518" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.213255" elapsed="0.000340">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:44.213690" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:44.212913" elapsed="0.000802"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.214348" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.213953" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.214729" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:44.214917" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:44.214585" elapsed="0.000361"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.215398" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.215149" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:48:44.215896" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.215570" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.216464" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.216126" elapsed="0.000366"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.215983" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.215549" elapsed="0.001002"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.217501" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:44.216748" elapsed="0.000784"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:44.217636" elapsed="0.000087"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:44.211269" elapsed="0.006705"/>
</kw>
<msg time="2026-08-15T23:48:44.218067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.197466" elapsed="0.020697"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.240714" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.262815" elapsed="0.000254"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.285401" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.285644" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.285863" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.286433" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.286168" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:44.286152" elapsed="0.000450"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.286806" elapsed="0.000061"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.287152" elapsed="0.000045"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.287478" elapsed="0.000043"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:44.286122" elapsed="0.001521"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.285989" elapsed="0.001713"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.287877" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.288032" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:44.288161" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:44.194386" elapsed="0.093805"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.290744" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.290224" elapsed="0.000773">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:44.291128" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:44.288964" elapsed="0.002189"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.291604" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.291262" elapsed="0.000496"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.293015" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.292271" elapsed="0.000785"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.291785" elapsed="0.001353"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.291242" elapsed="0.001923"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.296038" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.293321" elapsed="0.002744"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:44.296207" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:48:44.296369" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.288591" elapsed="0.007803"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.298283" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.297775" elapsed="0.000572"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.299011" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.298513" elapsed="0.000566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.299718" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.299243" elapsed="0.000537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.300617" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.299976" elapsed="0.000751"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:48:44.302510" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:48:44.301674" elapsed="0.000936"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:48:44.303486" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:48:44.302946" elapsed="0.000640"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.303890" elapsed="0.000499"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.305397" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.304655" elapsed="0.000939"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:48:44.305682" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:44.306020" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:48:44.300982" elapsed="0.005065"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:44.328125" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:48:44.328321" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:44.328684" 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-08-15T23:48:44.314626" elapsed="0.014149"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.306156" elapsed="0.022944"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.329597" elapsed="0.000200"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.329170" elapsed="0.000955"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.306137" elapsed="0.024045"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.337753" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.334153" elapsed="0.003728"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.332992" elapsed="0.004961"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.332915" elapsed="0.005164"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.342374" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.338892" elapsed="0.003584"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.338209" elapsed="0.004335"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.338166" elapsed="0.004474"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.344415" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:44.343401" elapsed="0.001115"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.345209" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.344690" elapsed="0.000615"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.346218" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.345712" elapsed="0.000543"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.345374" elapsed="0.000930"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.344656" elapsed="0.001760"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.347935" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:44.346931" elapsed="0.001103"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.348644" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.348165" elapsed="0.000574"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.349795" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.349344" elapsed="0.000506"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.348811" elapsed="0.001090"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.348133" elapsed="0.001834"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.350218" elapsed="0.000889"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:48:44.352042" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:44.351379" elapsed="0.000765"/>
</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-08-15T23:48:44.352406" elapsed="0.002801"/>
</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-08-15T23:48:44.331280" elapsed="0.024035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:48:44.355551" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-08-15T23:48:44.355401" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.355380" elapsed="0.000311"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.355861" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.355971" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:44.358285" 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-08-15T23:48:44.296819" elapsed="0.061494"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:48:44.358378" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:44.358536" 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-08-15T23:48:44.058956" elapsed="0.299605"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.358944" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.358658" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.358641" elapsed="0.000396"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:48:44.359070" elapsed="0.000026"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:48:44.056235" elapsed="0.302957"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.056000" elapsed="0.303236"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.055513" elapsed="0.303746"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.359400" elapsed="0.000237"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:48:44.027914" elapsed="0.331788"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:48:44.027106" elapsed="0.332706"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.360481" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.360019" elapsed="0.000490"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.379348" elapsed="0.000820"/>
</kw>
<msg time="2026-08-15T23:48:44.380220" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.378988" elapsed="0.001285"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.378578" elapsed="0.001770"/>
</kw>
<msg time="2026-08-15T23:48:44.380391" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.369709" elapsed="0.010727"/>
</kw>
<msg time="2026-08-15T23:48:44.380536" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.369390" elapsed="0.011171"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.429237" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.428629" elapsed="0.000656"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.430365" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.430126" elapsed="0.000312">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:44.430633" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:44.429653" elapsed="0.001025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.431635" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.431041" elapsed="0.000641"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.432409" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:44.432653" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:44.432161" elapsed="0.000537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.433404" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.433050" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.434692" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.434439" elapsed="0.000299"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.435177" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.434912" elapsed="0.000291"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.436038" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.435562" elapsed="0.000502"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.436782" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.436565" elapsed="0.000247"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.436980" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:48:44.437140" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.436250" elapsed="0.000918"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.437319" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:44.435429" elapsed="0.002155"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.438184" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:44.437886" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:44.438935" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.438704" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:44.439010" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:44.439160" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:44.438392" elapsed="0.000792"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:44.439330" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:44.437737" elapsed="0.001854"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:44.435254" elapsed="0.004371"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:44.439669" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:44.439829" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:44.434111" elapsed="0.005761"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.433663" elapsed="0.006268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.440200" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.439990" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.433621" elapsed="0.006711"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.441413" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:44.440626" elapsed="0.000838"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:44.441593" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:44.427077" elapsed="0.014749"/>
</kw>
<msg time="2026-08-15T23:48:44.442029" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:44.412911" elapsed="0.029172"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.454737" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.467329" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.479977" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.480204" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.480377" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.480864" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.480631" elapsed="0.000377"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:44.480616" elapsed="0.000469"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.481259" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.481568" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.481943" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:44.480586" elapsed="0.001554"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.480451" elapsed="0.001722"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.482317" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.482392" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:44.482510" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:44.408523" elapsed="0.074013"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.484158" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.483764" elapsed="0.000580">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:44.484522" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:44.483241" elapsed="0.001307"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.484936" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.484619" elapsed="0.000456"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.485751" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:44.485268" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:44.485102" elapsed="0.000838"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.484601" elapsed="0.001364"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.492671" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:44.486114" elapsed="0.006585"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:44.492752" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:44.492928" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.482918" elapsed="0.010035"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:44.494531" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.494165" elapsed="0.000546">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:44.494909" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:44.493605" elapsed="0.001329"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:44.495142" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:44.495007" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:44.494988" elapsed="0.000268"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.495405" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.495573" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.495639" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:44.497653" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:44.493282" elapsed="0.004398"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.499374" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.498911" elapsed="0.000509"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:44.500076" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:44.499570" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:44.514703" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:44.514987" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:44.515171" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.502435" elapsed="0.013160">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:44.500193" elapsed="0.015596">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.516026" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.515829" elapsed="0.000375"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:44.500174" elapsed="0.016059">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.516708" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.516879" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:44.516805" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:44.516788" elapsed="0.000158"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.517088" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.517159" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.498087" elapsed="0.019179">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.517341" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.385759" elapsed="0.131678">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:44.517702" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:44.517527" elapsed="0.000282"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:44.517511" elapsed="0.000398"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:44.517947" elapsed="0.000016"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.381346" elapsed="0.136704">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.573243" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:47.572616" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:47.574409" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.574142" elapsed="0.000345">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:47.574681" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:47.573646" elapsed="0.001080"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.575681" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:47.575091" elapsed="0.000637"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:47.576435" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:47.576694" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:47.576188" elapsed="0.000551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.577447" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:47.577085" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.578771" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:47.578511" elapsed="0.000322"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.579262" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:47.578992" elapsed="0.000295"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.580024" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:47.579651" elapsed="0.000399"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:47.580778" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:47.580554" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:47.580874" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:48:47.581036" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:47.580233" elapsed="0.000827"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:47.581209" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:47.579518" elapsed="0.001974"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.582078" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:47.581735" elapsed="0.000370"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:47.582965" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:47.582736" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:47.583042" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:47.583257" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:47.582287" elapsed="0.000996"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:47.583434" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:47.581606" elapsed="0.002092"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:47.579340" elapsed="0.004394"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:47.583778" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:47.583955" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:47.578184" elapsed="0.005797"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:47.577696" elapsed="0.006344"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.584308" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:47.584100" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:47.577651" elapsed="0.006791"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.585542" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:47.584737" elapsed="0.000852"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:47.585719" elapsed="0.000072"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:47.571052" elapsed="0.014920"/>
</kw>
<msg time="2026-08-15T23:48:47.586181" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:47.556839" elapsed="0.029399"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.598895" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.611544" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.624124" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.624322" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.624496" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.625000" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:47.624764" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:47.624748" elapsed="0.000471"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.625399" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.625763" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.626132" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:47.624712" elapsed="0.001618"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.624575" elapsed="0.001785"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.626507" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.626585" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:47.626720" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:47.552528" elapsed="0.074219"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:47.628463" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.628047" elapsed="0.000612">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:47.628862" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:47.627496" elapsed="0.001393"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.629220" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:47.628961" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.630134" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:47.629562" elapsed="0.000613"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:47.629385" elapsed="0.000897"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:47.628942" elapsed="0.001365"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.637061" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:47.630456" elapsed="0.006633"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:47.637142" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:47.637303" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:47.627127" elapsed="0.010201"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:47.638897" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.638501" elapsed="0.000582">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:47.639263" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:47.638014" elapsed="0.001274"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:47.639515" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:47.639359" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:47.639341" elapsed="0.000256"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.639739" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.639969" elapsed="0.000027"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.640047" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:47.642384" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:47.637653" elapsed="0.004762"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.644758" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:47.644096" elapsed="0.000754"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:47.645534" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:47.645030" elapsed="0.000558"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:47.735862" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:47.736127" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:47.736321" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.648395" elapsed="0.088363">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:47.645665" elapsed="0.091314">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.737189" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:47.737018" elapsed="0.000341"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:47.645644" elapsed="0.091743">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.737902" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.738046" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:47.738006" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:47.737988" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.738255" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.738325" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.642849" elapsed="0.095593">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.738518" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.529751" elapsed="0.208867">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:47.738931" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:47.738710" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:47.738693" elapsed="0.000335"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:47.739060" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:47.519141" elapsed="0.220021">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.796219" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:50.795574" elapsed="0.000700"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:50.797368" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.797102" elapsed="0.000342">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:50.797643" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:50.796626" elapsed="0.001062"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.798693" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:50.798095" elapsed="0.000646"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:50.799436" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:50.799693" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:50.799185" elapsed="0.000555"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.800484" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:50.800120" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.801773" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:50.801514" elapsed="0.000324"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.802266" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:50.801996" elapsed="0.000297"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.802970" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:50.802648" elapsed="0.000348"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:50.803713" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:50.803490" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:50.803791" elapsed="0.000136"/>
</return>
<msg time="2026-08-15T23:48:50.804060" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:50.803177" elapsed="0.000908"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:50.804235" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:50.802517" elapsed="0.002000"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.805082" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:50.804763" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:50.805975" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:50.805745" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:50.806052" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:50.806204" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:50.805290" elapsed="0.000939"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:50.806377" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:50.804633" elapsed="0.002007"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:50.802342" elapsed="0.004333"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:50.806718" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:48:50.806893" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:50.801187" elapsed="0.005733"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:50.800737" elapsed="0.006242"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.807249" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:50.807038" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:50.800692" elapsed="0.006726"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.808588" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:50.807720" elapsed="0.000917"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:50.808772" elapsed="0.000096"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:50.793991" elapsed="0.015041"/>
</kw>
<msg time="2026-08-15T23:48:50.809205" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:50.779656" elapsed="0.029604"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.822019" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.834731" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.847457" elapsed="0.000037"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.847685" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.847885" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.848391" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:50.848172" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:50.848155" elapsed="0.000463"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.848859" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.849177" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.849532" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:50.848119" elapsed="0.001612"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.847968" elapsed="0.001794"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.849930" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.850009" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:48:50.850149" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:50.775282" elapsed="0.074942"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:50.851950" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.851507" elapsed="0.000642">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:50.852330" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:50.850973" elapsed="0.001383"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.852716" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:50.852429" elapsed="0.000464"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.853598" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:50.853100" elapsed="0.000540"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:50.852922" elapsed="0.000825"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:50.852410" elapsed="0.001362"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.860420" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:50.853998" elapsed="0.006449"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:50.860499" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:48:50.860657" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:50.850599" elapsed="0.010083"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:50.862314" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.861928" elapsed="0.000574">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:50.862683" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:50.861409" elapsed="0.001300"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:50.862942" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:48:50.862780" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:50.862761" elapsed="0.000265"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.863169" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.863336" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.863401" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:50.865744" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:50.861083" elapsed="0.004689"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.867559" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:50.866995" elapsed="0.000614"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:50.868251" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:50.867771" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:50.960991" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:50.961546" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:50.962154" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.870620" elapsed="0.092546">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:50.868367" elapsed="0.095262">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.964198" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:50.963722" elapsed="0.000867"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:50.868348" elapsed="0.096305">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.965773" elapsed="0.000134"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.966166" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:50.966075" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:50.966035" elapsed="0.000379"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.966915" elapsed="0.000059"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.967089" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.866156" elapsed="0.101188">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.967539" elapsed="0.000040"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.752332" elapsed="0.215343">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:50.967994" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:50.967768" elapsed="0.000300"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:50.967751" elapsed="0.000341"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:50.968124" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:50.740233" elapsed="0.227992">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.024297" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:54.023658" elapsed="0.000693"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:54.025450" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:54.025182" elapsed="0.000346">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:54.025725" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:54.024705" elapsed="0.001066"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.026796" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:54.026151" elapsed="0.000831"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:54.027650" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:54.027979" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:54.027392" elapsed="0.000635"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.028735" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:54.028364" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.030079" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:54.029794" elapsed="0.000331"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.030558" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:54.030284" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.031374" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:54.031067" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:54.032209" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:54.031978" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:54.032288" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:48:54.032453" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:54.031588" elapsed="0.000891"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:54.032631" elapsed="0.000266"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:54.030924" elapsed="0.002013"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.033488" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:54.033189" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:54.034269" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:54.034043" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:54.034348" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:54.034501" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:54.033704" elapsed="0.000822"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:54.034676" elapsed="0.000243"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:54.033057" elapsed="0.001903"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:54.030640" elapsed="0.004355"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:54.035045" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:48:54.035207" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:54.029455" elapsed="0.005779"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:54.029046" elapsed="0.006247"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.035568" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:54.035354" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:54.028998" elapsed="0.006707"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.037081" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:54.036088" elapsed="0.001044"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:54.037265" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:54.022040" elapsed="0.015465"/>
</kw>
<msg time="2026-08-15T23:48:54.037678" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:54.007383" elapsed="0.030351"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.050899" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.063599" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.076321" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.076518" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.076692" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.077183" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:54.076969" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:54.076954" elapsed="0.000450"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.077581" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.077920" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.078345" elapsed="0.000032"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:54.076922" elapsed="0.001653"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.076767" elapsed="0.001839"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.078758" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.078861" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:48:54.078987" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:54.002789" elapsed="0.076226"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:54.080646" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:54.080230" elapsed="0.000669">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:54.081113" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:54.079702" elapsed="0.001437"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.081496" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:54.081212" elapsed="0.000422"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.082407" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:54.081901" elapsed="0.000547"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:54.081663" elapsed="0.000892"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:54.081193" elapsed="0.001387"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.089228" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:54.082732" elapsed="0.006523"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:54.089309" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:54.089466" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:54.079373" elapsed="0.010118"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:54.091066" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:54.090660" elapsed="0.000593">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:54.091436" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:54.090176" elapsed="0.001286"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:54.091672" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:54.091535" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:54.091516" elapsed="0.000240"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.091921" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.092092" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.092158" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:54.094411" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:54.089849" elapsed="0.004589"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.096232" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:54.095627" elapsed="0.000660"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:54.096978" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:54.096444" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:54.196533" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:54.197135" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:54.197551" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:54.099338" elapsed="0.099263">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:54.097095" elapsed="0.101996">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.199547" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:54.199178" elapsed="0.000815"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:54.097075" elapsed="0.102985">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.201399" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.201787" elapsed="0.000131"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:54.201628" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:54.201589" elapsed="0.000449"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.202367" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.202529" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:54.094796" elapsed="0.107983">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.202991" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:53.979633" elapsed="0.223582">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:54.203882" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:54.203423" elapsed="0.000629"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:54.203384" elapsed="0.000724"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:54.204182" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:53.969351" elapsed="0.235062">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.259920" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:57.259282" elapsed="0.000694"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:57.261125" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.260801" elapsed="0.000403">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:57.261406" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:57.260345" elapsed="0.001107"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.262433" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:57.261826" elapsed="0.000654"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:48:57.263102" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:48:57.263369" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:48:57.262846" elapsed="0.000571"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.264294" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:57.263757" elapsed="0.000636"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.265637" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:57.265374" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.266245" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:48:57.265969" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.266968" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:57.266637" elapsed="0.000357"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:57.267720" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:57.267500" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:57.267837" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:48:57.268000" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:57.267181" elapsed="0.000844"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:48:57.268211" elapsed="0.000276"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:48:57.266502" elapsed="0.002029"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.269180" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:48:57.268789" elapsed="0.000417"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:48:57.269993" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:48:57.269741" elapsed="0.000279"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:48:57.270082" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:48:57.270247" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:48:57.269407" 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-08-15T23:48:57.270435" elapsed="0.000241"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:48:57.268655" elapsed="0.002062"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:48:57.266326" elapsed="0.004435"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:48:57.270826" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:48:57.270992" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:48:57.264973" elapsed="0.006047"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:57.264553" elapsed="0.006528"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.271372" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:57.271155" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:57.264506" elapsed="0.007022"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.273056" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:48:57.271909" elapsed="0.001260"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:48:57.273324" elapsed="0.000082"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:48:57.257670" elapsed="0.015910"/>
</kw>
<msg time="2026-08-15T23:48:57.273784" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:48:57.243203" elapsed="0.030687"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.289143" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.301937" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.314788" elapsed="0.000050"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.315010" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.315185" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.315667" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:57.315450" elapsed="0.000385"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:57.315434" elapsed="0.000481"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.316096" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.316407" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.316755" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:48:57.315403" elapsed="0.001569"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.315263" elapsed="0.001740"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.317148" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.317226" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:48:57.317347" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:48:57.238798" elapsed="0.078577"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:57.319068" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.318637" elapsed="0.000624">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:57.319446" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:57.318140" elapsed="0.001333"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.319796" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:57.319545" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.320652" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:48:57.320161" elapsed="0.000537"/>
</kw>
<status status="PASS" start="2026-08-15T23:48:57.319987" elapsed="0.000886"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:57.319526" elapsed="0.001374"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.327718" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:48:57.321050" elapsed="0.006697"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:48:57.327804" elapsed="0.000044"/>
</return>
<msg time="2026-08-15T23:48:57.327975" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:57.317793" elapsed="0.010208"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:48:57.329629" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.329244" elapsed="0.000588">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:48:57.330017" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:48:57.328686" elapsed="0.001356"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:48:57.330251" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:48:57.330114" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:48:57.330095" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.330477" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.330645" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.330712" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:48:57.332900" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:48:57.328364" elapsed="0.004565"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.334718" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:57.334232" elapsed="0.000536"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:48:57.335440" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:48:57.334954" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:48:57.419191" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:48:57.419710" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:48:57.420156" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.337859" elapsed="0.083243">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:48:57.335558" elapsed="0.085971">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.422017" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:57.421611" elapsed="0.000807"/>
</branch>
<status status="FAIL" start="2026-08-15T23:48:57.335539" elapsed="0.086944">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.423520" elapsed="0.000059"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.423904" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:48:57.423736" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:57.423699" elapsed="0.000353"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.424369" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.424523" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.333290" elapsed="0.091472">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.425175" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.214022" elapsed="0.211389">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:48:57.426084" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:48:57.425617" elapsed="0.000686"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:48:57.425580" elapsed="0.000779"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:48:57.426432" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:48:57.205522" elapsed="0.221138">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.481787" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:00.481139" elapsed="0.000731"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:00.482998" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.482699" elapsed="0.000377">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:00.483286" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:00.482238" elapsed="0.001096"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.484436" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:00.483697" elapsed="0.000787"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:00.485168" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:00.485444" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:00.484908" elapsed="0.000583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.486260" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:00.485885" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.487572" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:00.487307" elapsed="0.000311"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.488127" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:00.487777" elapsed="0.000377"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.488899" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:00.488561" elapsed="0.000365"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:00.489684" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:00.489448" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:00.489764" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:49:00.489983" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:00.489114" elapsed="0.000894"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:00.490228" elapsed="0.000256"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:00.488403" elapsed="0.002123"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.491097" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:00.490777" elapsed="0.000346"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:00.491896" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:00.491641" elapsed="0.000283"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:00.491976" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:00.492132" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:00.491320" elapsed="0.000837"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:00.492316" elapsed="0.000280"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:00.490644" elapsed="0.002000"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:00.488217" elapsed="0.004466"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:00.492732" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:00.492915" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:00.486958" elapsed="0.005984"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:00.486535" elapsed="0.006466"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.493303" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:00.493065" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:00.486486" elapsed="0.006955"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.494744" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:00.493740" elapsed="0.001053"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:00.494948" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:00.479481" elapsed="0.015706"/>
</kw>
<msg time="2026-08-15T23:49:00.495364" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:00.464759" elapsed="0.030683"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.508822" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.521501" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.534041" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.534270" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.534446" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.534934" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:00.534701" elapsed="0.000376"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:00.534686" elapsed="0.000467"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.535327" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.535639" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.536009" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:00.534656" elapsed="0.001548"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.534521" elapsed="0.001712"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.536378" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.536454" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:00.536575" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:00.460499" elapsed="0.076102"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:00.538235" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.537834" elapsed="0.000593">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:00.538605" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:00.537321" elapsed="0.001310"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.539017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:00.538702" elapsed="0.000453"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.539905" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:00.539360" elapsed="0.000587"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:00.539184" elapsed="0.000872"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:00.538683" elapsed="0.001398"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.546723" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:00.540230" elapsed="0.006521"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:00.546845" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:49:00.547004" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:00.536999" elapsed="0.010030"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:00.548568" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.548197" elapsed="0.000559">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:00.549016" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:00.547676" elapsed="0.001366"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:00.549256" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:49:00.549114" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:00.549094" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.549524" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.549692" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.549757" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:00.551959" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:00.547355" elapsed="0.004631"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.553637" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:00.553180" elapsed="0.000504"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:00.554302" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:00.553851" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:00.646742" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:00.647318" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:00.647719" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.556690" elapsed="0.091979">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:00.554415" elapsed="0.094738">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.649685" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:00.649237" elapsed="0.000879"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:00.554397" elapsed="0.095784">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.651375" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.651679" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:00.651595" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:00.651557" elapsed="0.000322"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.652199" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.652356" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.552341" elapsed="0.100257">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.652764" elapsed="0.000072"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.437421" elapsed="0.215606">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:00.653670" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:00.653228" elapsed="0.000729"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:00.653190" elapsed="0.000805"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:00.654042" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:00.427621" elapsed="0.226563">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.713530" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:03.712925" elapsed="0.000660"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:03.714713" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.714452" elapsed="0.000336">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:03.715016" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:03.713997" elapsed="0.001063"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.716119" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:03.715398" elapsed="0.000769"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:03.716749" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:03.717027" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:03.716501" elapsed="0.000572"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.717761" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:03.717404" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.719119" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:03.718860" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.719584" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:03.719318" elapsed="0.000292"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.720354" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:03.720056" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:03.721120" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:03.720896" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:03.721198" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:49:03.721360" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:03.720563" elapsed="0.000822"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:03.721534" elapsed="0.000238"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:03.719921" elapsed="0.001921"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.722420" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:03.722120" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:03.723175" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:03.722962" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:03.723252" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:03.723403" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:03.722628" elapsed="0.000800"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:03.723572" elapsed="0.000295"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:03.721988" elapsed="0.001920"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:03.719662" elapsed="0.004281"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:03.723986" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:03.724141" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:03.718515" elapsed="0.005652"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:03.718115" elapsed="0.006109"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.724492" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:03.724284" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:03.718071" elapsed="0.006553"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.725726" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:03.724944" elapsed="0.000830"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:03.725947" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:03.711315" elapsed="0.014868"/>
</kw>
<msg time="2026-08-15T23:49:03.726351" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:03.696898" elapsed="0.029508"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.739321" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.752028" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.764772" elapsed="0.000046"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.764984" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.765156" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.765619" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:03.765409" elapsed="0.000350"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:03.765394" elapsed="0.000468"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.766041" elapsed="0.000061"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.766427" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.766921" elapsed="0.000059"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:03.765364" elapsed="0.001800"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.765230" elapsed="0.001963"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.767339" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.767416" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:03.767537" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:03.691605" elapsed="0.075957"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:03.769176" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.768762" elapsed="0.000603">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:03.769545" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:03.768266" elapsed="0.001305"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.769908" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:03.769642" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.770756" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:03.770267" elapsed="0.000529"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:03.770094" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:03.769623" elapsed="0.001378"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.777472" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:03.771151" elapsed="0.006349"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:03.777552" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:03.777707" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:03.767943" elapsed="0.009789"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:03.779540" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.779171" elapsed="0.000553">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:03.779965" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:03.778658" elapsed="0.001333"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:03.780201" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:03.780063" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:03.780044" elapsed="0.000241"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.780427" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.780594" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.780660" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:03.782874" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:03.778337" elapsed="0.004566"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.784551" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:03.784091" elapsed="0.000508"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:03.785222" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:03.784750" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:03.883332" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:03.883934" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:03.884404" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.787623" elapsed="0.097749">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:03.785373" elapsed="0.100497">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.886367" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:03.885964" elapsed="0.000947"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:03.785354" elapsed="0.101612">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.887678" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.887966" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:03.887904" elapsed="0.000124"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:03.887797" elapsed="0.000261"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.888262" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.888362" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.783263" elapsed="0.105255">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.888628" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.663007" elapsed="0.225759">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:03.889204" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:03.888946" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:03.888917" elapsed="0.000423"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:03.889386" elapsed="0.000021"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:03.655340" elapsed="0.234187">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.945046" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:06.944414" elapsed="0.000686"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:06.946286" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:06.946013" elapsed="0.000348">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:06.946561" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:06.945527" elapsed="0.001080"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.947613" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:06.946981" elapsed="0.000680"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:06.948398" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:06.948658" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:06.948148" elapsed="0.000556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.949414" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:06.949056" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.950752" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:06.950495" elapsed="0.000302"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.951277" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:06.950974" elapsed="0.000330"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.952061" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:06.951673" elapsed="0.000416"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:06.952840" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:06.952597" elapsed="0.000270"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:06.952921" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:06.953085" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:06.952278" elapsed="0.000832"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:06.953260" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:06.951538" elapsed="0.002005"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.954111" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:06.953788" elapsed="0.000349"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:06.954862" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:06.954632" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:06.954939" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:06.955088" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:06.954320" elapsed="0.000792"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:06.955271" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:06.953658" elapsed="0.001877"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:06.951360" elapsed="0.004210"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:06.955614" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:06.955770" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:06.950159" elapsed="0.005637"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:06.949671" elapsed="0.006199"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.956142" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:06.955931" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:06.949625" elapsed="0.006651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:06.957593" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:06.956576" elapsed="0.001113"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:06.957869" elapsed="0.000081"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:06.942752" elapsed="0.015364"/>
</kw>
<msg time="2026-08-15T23:49:06.958287" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:06.928271" elapsed="0.030072"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.971083" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.984915" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.997586" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.997778" elapsed="0.000042"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.997974" elapsed="0.000027"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.998457" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:06.998239" elapsed="0.000362"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:06.998223" elapsed="0.000455"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.998876" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.999190" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.999568" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:06.998192" elapsed="0.001574"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:06.998056" elapsed="0.001740"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:06.999959" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:07.000036" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:07.000165" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:06.923650" elapsed="0.076542"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:07.001989" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:07.001506" elapsed="0.000675">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:07.002362" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:07.000944" elapsed="0.001444"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.002711" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:07.002462" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:07.003636" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:07.003086" elapsed="0.000592"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:07.002906" elapsed="0.000883"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:07.002442" elapsed="0.001438"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:07.010506" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:07.004034" elapsed="0.006500"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:07.010588" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:07.010745" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:07.000594" elapsed="0.010178"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:07.012424" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:07.012047" elapsed="0.000565">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:07.012796" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:07.011474" elapsed="0.001370"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:07.013058" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:49:07.012920" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:07.012900" elapsed="0.000251"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.013295" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.013465" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:07.013531" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:07.015729" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:07.011120" elapsed="0.004638"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:07.017469" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:07.017004" elapsed="0.000514"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:07.018149" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:07.017669" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:07.115987" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:07.116520" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:07.117037" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:07.020535" elapsed="0.097678">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:07.018265" elapsed="0.100463">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.119246" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:07.118895" elapsed="0.000799"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:07.018246" elapsed="0.101520">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.120947" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:07.121257" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:07.121171" elapsed="0.000179"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:07.121132" elapsed="0.000266"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.121734" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:07.121931" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:07.016163" elapsed="0.106014">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:07.122346" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:06.899164" elapsed="0.223424">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:07.123272" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:07.122792" elapsed="0.000655"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:07.122755" elapsed="0.000747"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:07.123572" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:06.890564" elapsed="0.233391">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.181240" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:10.180608" elapsed="0.000688"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:10.182481" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.182152" elapsed="0.000404">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:10.182758" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:10.181645" elapsed="0.001218"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.183912" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:10.183210" elapsed="0.000752"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:10.184551" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:10.184885" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:10.184296" elapsed="0.000636"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.185624" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:10.185263" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.186974" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:10.186696" elapsed="0.000325"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.187462" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:10.187180" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.188237" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:10.187934" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:10.189015" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:10.188776" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:10.189094" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:49:10.189256" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:10.188459" elapsed="0.000822"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:10.189432" elapsed="0.000236"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:10.187719" elapsed="0.001989"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.190307" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:10.190000" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:10.191062" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:10.190850" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:10.191139" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:10.191290" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:10.190517" elapsed="0.000798"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:10.191462" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:10.189851" elapsed="0.001871"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:10.187542" elapsed="0.004216"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:10.191815" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:10.191975" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:10.186365" elapsed="0.005637"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:10.185964" elapsed="0.006095"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.192326" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:10.192119" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:10.185917" elapsed="0.006551"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.193779" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:10.192784" elapsed="0.001062"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:10.194020" elapsed="0.000076"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:10.179022" elapsed="0.015238"/>
</kw>
<msg time="2026-08-15T23:49:10.194430" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:10.164640" elapsed="0.029845"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.207409" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.220112" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.232744" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.232958" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.233130" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.233601" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:10.233387" elapsed="0.000358"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:10.233372" elapsed="0.000476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.234049" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.234362" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.234716" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:10.233341" elapsed="0.001587"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.233206" elapsed="0.001751"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.235103" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.235178" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:10.235304" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:10.160323" elapsed="0.075007"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:10.236952" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.236541" elapsed="0.000598">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:10.237317" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:10.236042" elapsed="0.001301"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.237663" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:10.237414" elapsed="0.000439"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.238698" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:10.238203" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:10.237885" elapsed="0.001026"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:10.237395" elapsed="0.001542"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.245466" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:10.239090" elapsed="0.006404"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:10.245546" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:10.245701" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:10.235689" elapsed="0.010037"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:10.247327" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.246959" elapsed="0.000549">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:10.247686" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:10.246399" elapsed="0.001313"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:10.247937" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:10.247783" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:10.247764" elapsed="0.000256"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.248168" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.248335" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.248401" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:10.250572" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:10.246078" elapsed="0.004521"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.252287" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:10.251832" elapsed="0.000502"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:10.252950" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:10.252482" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:10.339663" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:10.340298" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:10.340752" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.255299" elapsed="0.086410">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:10.253063" elapsed="0.089187">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.342761" elapsed="0.000100"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:10.342346" elapsed="0.000876"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:10.253045" elapsed="0.090242">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.344496" elapsed="0.000066"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.344978" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:10.344878" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:10.344789" elapsed="0.000339"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.345478" elapsed="0.000054"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.345645" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.251000" elapsed="0.095048">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.346289" elapsed="0.000040"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.133497" elapsed="0.213023">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:10.347201" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:10.346726" elapsed="0.000618"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:10.346687" elapsed="0.000682"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:10.347402" elapsed="0.000016"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:10.125112" elapsed="0.222394">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.400999" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:13.400364" elapsed="0.000696"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:13.402162" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.401889" elapsed="0.000351">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:13.402439" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:13.401418" elapsed="0.001066"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.403516" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:13.402918" elapsed="0.000646"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:13.404254" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:13.404519" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:13.403998" elapsed="0.000567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.405273" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:13.404911" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.406575" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:13.406315" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.407191" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:13.406913" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.407972" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:13.407591" elapsed="0.000408"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:13.408729" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:13.408504" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:13.408828" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:49:13.408997" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:13.408187" 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-08-15T23:49:13.409174" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:13.407458" elapsed="0.001999"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.410029" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:13.409712" elapsed="0.000343"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:13.410764" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:13.410553" elapsed="0.000278"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:13.410882" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:13.411033" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:13.410236" elapsed="0.000822"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:13.411204" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:13.409574" elapsed="0.001891"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:13.407275" elapsed="0.004224"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:13.411543" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:13.411705" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:13.405987" elapsed="0.005744"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:13.405529" elapsed="0.006260"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.412088" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:13.411875" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:13.405482" elapsed="0.006739"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.413506" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:13.412520" elapsed="0.001035"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:13.413689" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:13.398734" elapsed="0.015219"/>
</kw>
<msg time="2026-08-15T23:49:13.414123" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:13.384219" elapsed="0.029958"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.426897" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.439505" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.452171" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.452366" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.452537" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.453036" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:13.452792" elapsed="0.000387"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:13.452776" elapsed="0.000478"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.453429" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.453740" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.454108" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:13.452746" elapsed="0.001557"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.452613" elapsed="0.001728"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.454486" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.454562" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:13.454681" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:13.379948" elapsed="0.074759"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:13.456321" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.455946" elapsed="0.000561">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:13.456683" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:13.455430" elapsed="0.001279"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.457081" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:13.456780" elapsed="0.000437"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.457974" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:13.457426" elapsed="0.000589"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:13.457245" elapsed="0.000876"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:13.456761" elapsed="0.001385"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.464681" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:13.458300" elapsed="0.006408"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:13.464760" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:13.464929" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:13.455108" elapsed="0.009847"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:13.466513" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.466146" elapsed="0.000550">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:13.466991" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:13.465601" elapsed="0.001416"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:13.467229" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:13.467090" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:13.467071" elapsed="0.000248"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.467464" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.467632" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.467698" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:13.469892" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:13.465279" elapsed="0.004641"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.471580" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:13.471127" elapsed="0.000500"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:13.472238" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:13.471776" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:13.575941" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:13.576482" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:13.576923" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.474554" elapsed="0.103312">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:13.472350" elapsed="0.105949">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.578730" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:13.578379" elapsed="0.000815"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:13.472332" elapsed="0.106926">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.580314" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.580623" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:13.580538" elapsed="0.000180"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:13.580499" elapsed="0.000267"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.581166" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.581324" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.470273" elapsed="0.111293">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.581734" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.356982" elapsed="0.225093">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:13.582703" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:13.582287" elapsed="0.000645"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:13.582248" elapsed="0.000784"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:13.583116" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:13.348532" elapsed="0.234824">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.640453" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:16.639764" elapsed="0.000746"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:16.641687" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.641380" elapsed="0.000386">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:16.641996" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:16.640889" elapsed="0.001163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.643193" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:16.642408" elapsed="0.000835"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:16.643868" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:16.644149" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:16.643590" elapsed="0.000608"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.644949" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.644537" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.646427" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.646119" elapsed="0.000362"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.647033" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.646646" elapsed="0.000414"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.647770" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:16.647461" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:16.648624" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.648380" elapsed="0.000271"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:16.648708" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:49:16.648891" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:16.648007" elapsed="0.000910"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.649073" elapsed="0.000302"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:16.647326" elapsed="0.002111"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.650101" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:16.649715" elapsed="0.000414"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:16.650896" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.650662" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:16.650974" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:16.651125" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:16.650343" elapsed="0.000809"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.651309" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:16.649563" elapsed="0.002011"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:16.647135" elapsed="0.004475"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:16.651654" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:16.651829" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:16.645696" elapsed="0.006161"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.645222" elapsed="0.006695"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.652196" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.651977" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.645175" elapsed="0.007162"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.653582" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:16.652646" elapsed="0.000986"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:16.653765" elapsed="0.000092"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:16.638096" elapsed="0.015928"/>
</kw>
<msg time="2026-08-15T23:49:16.654193" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:16.623130" elapsed="0.031128"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.668005" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.680688" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.693686" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.693905" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.694101" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.694702" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.694449" elapsed="0.000446"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:16.694426" elapsed="0.000559"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.695215" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.695619" elapsed="0.000029"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.696052" elapsed="0.000025"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:16.694386" elapsed="0.001889"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.694241" elapsed="0.002067"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.696457" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.696547" elapsed="0.000023"/>
</return>
<msg time="2026-08-15T23:49:16.696686" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:16.618676" elapsed="0.078037"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:16.698386" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.697992" elapsed="0.000599">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:16.698775" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:16.697454" elapsed="0.001366"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.699147" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.698895" elapsed="0.000395"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.700107" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:16.699496" elapsed="0.000658"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.699319" elapsed="0.000944"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.698877" elapsed="0.001412"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.706846" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:16.700440" elapsed="0.006435"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:16.706928" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:16.707085" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:16.697103" elapsed="0.010008"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:16.708770" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.708342" elapsed="0.000629">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:16.709153" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:16.707765" elapsed="0.001414"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:16.709404" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:16.709251" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.709232" elapsed="0.000257"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.709632" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.709863" elapsed="0.000024"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.709969" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:16.712100" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:16.707440" elapsed="0.004687"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.713831" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.713352" elapsed="0.000529"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.714484" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.714030" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:16.814267" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:16.814551" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:16.814771" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.716823" elapsed="0.098425">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:16.714597" elapsed="0.100856">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.815687" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.815494" elapsed="0.000390"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:16.714579" elapsed="0.101334">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.816414" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.816559" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:16.816519" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:16.816500" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.816768" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.816860" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.712486" elapsed="0.104489">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.817052" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.592924" elapsed="0.224227">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.817445" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.817243" elapsed="0.000275"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:16.817226" elapsed="0.000317"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.817575" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.584544" elapsed="0.233131">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:49:16.817882" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.380724" elapsed="32.437256">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.360648" elapsed="32.457450">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.826694" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.827056" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.827241" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:49:16.826865" elapsed="0.000441"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.826785" elapsed="0.000548"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:16.828792" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:49:16.828472" elapsed="0.000363"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.829483" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.828999" elapsed="0.000512"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:16.848388" elapsed="0.000872"/>
</kw>
<msg time="2026-08-15T23:49:16.849504" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:16.848024" elapsed="0.001551"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:16.847585" elapsed="0.002068"/>
</kw>
<msg time="2026-08-15T23:49:16.849695" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:16.838737" elapsed="0.011015"/>
</kw>
<msg time="2026-08-15T23:49:16.849871" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:16.838376" elapsed="0.011520"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.893880" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:16.893204" elapsed="0.000784"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:16.895542" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:16.895047" elapsed="0.000599">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:16.895769" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:16.894288" elapsed="0.001621"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.897324" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:16.896250" elapsed="0.001211"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:16.898190" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:16.898414" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:16.897972" elapsed="0.000546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.899315" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.898827" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.901327" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.901063" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.901933" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.901587" elapsed="0.000373"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.902885" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:16.902403" elapsed="0.000509"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:16.903681" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.903454" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:16.903758" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:16.903987" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:16.903101" elapsed="0.000912"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.904163" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:16.902269" elapsed="0.002161"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.904990" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:16.904674" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:16.905772" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.905562" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:16.905871" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:16.906021" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:16.905197" elapsed="0.000849"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:16.906194" elapsed="0.000228"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:16.904544" elapsed="0.001922"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:16.902057" elapsed="0.004466"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:16.906587" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:49:16.906973" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:16.900278" elapsed="0.006784"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.899549" elapsed="0.007587"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.907430" elapsed="0.000083"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.907213" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.899528" elapsed="0.008135"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.908754" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:16.907828" elapsed="0.001054"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:16.909119" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:16.892226" elapsed="0.017041"/>
</kw>
<msg time="2026-08-15T23:49:16.909360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:16.879280" elapsed="0.030158"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.922209" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.934831" 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/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.947341" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.947546" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.947721" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.948168" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.948018" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:16.948001" 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-08-15T23:49:16.948386" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.948549" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.948710" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:16.947966" elapsed="0.000796"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.947814" elapsed="0.000975"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.948954" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:16.949029" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:16.949159" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:16.874911" elapsed="0.074275"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.950386" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.950111" elapsed="0.000323"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:16.962627" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:16.962713" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:16.962829" 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-08-15T23:49:16.952792" elapsed="0.010065"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.950500" elapsed="0.012397"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.963079" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.962924" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.950483" elapsed="0.012679"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.966937" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.964335" elapsed="0.002647"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.964114" elapsed="0.002902"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.964096" elapsed="0.002946"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.969871" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:16.967316" elapsed="0.002604"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.967098" elapsed="0.002856"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.967081" elapsed="0.002898"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.970539" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:16.970151" elapsed="0.000416"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.970891" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.970636" elapsed="0.000313"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.971530" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:16.971133" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.970974" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.970618" elapsed="0.000996"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.972155" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:16.971768" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:16.972482" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:16.972252" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:16.973133" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:16.972718" elapsed="0.000441"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:16.972562" elapsed="0.000632"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:16.972233" elapsed="0.000982"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:16.973361" elapsed="0.000510"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:49:16.974402" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:16.974037" elapsed="0.000392"/>
</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-08-15T23:49:16.974581" elapsed="0.005706"/>
</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-08-15T23:49:16.963663" elapsed="0.016688"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:49:16.980397" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:49:16.982810" 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-08-15T23:49:16.949475" elapsed="0.033365"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:49:16.982895" elapsed="0.000029"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:49:16.850113" elapsed="0.132907"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:49:16.828013" elapsed="0.155071"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:49:16.827530" elapsed="0.155609"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.023349" elapsed="32.959878">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:48:44.022936" elapsed="32.960392">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:48:44.022537" elapsed="32.960855">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:48:44.021974" elapsed="32.961514">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:17.988035" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:17.987247" elapsed="0.000863"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:49:17.988227" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:49:17.988580" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:49:17.986418" elapsed="0.002221"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.015237" elapsed="0.000987"/>
</kw>
<msg time="2026-08-15T23:49:18.016367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.014778" elapsed="0.001649"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.014384" elapsed="0.002120"/>
</kw>
<msg time="2026-08-15T23:49:18.016547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.005235" elapsed="0.011358"/>
</kw>
<msg time="2026-08-15T23:49:18.016695" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.004893" elapsed="0.011826"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.017617" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.016901" elapsed="0.000744"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.018137" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.017740" elapsed="0.000466"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.052473" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.052085" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.053355" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.053096" elapsed="0.000337">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:18.053529" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:18.052729" elapsed="0.000824"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.054243" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.053777" elapsed="0.000495"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.054743" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:18.054946" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:18.054558" elapsed="0.000415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.055441" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.055186" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.056536" level="INFO">mapping: {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.056250" elapsed="0.000334"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.057044" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.056743" elapsed="0.000327"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.057768" level="INFO">${value} = 10.30.170.145</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.057447" elapsed="0.000371"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.058602" level="INFO">${encoded} = 10.30.170.145</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.058367" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.058681" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:18.058883" level="INFO">${encoded_value} = 10.30.170.145</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.058029" elapsed="0.000880"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.059080" elapsed="0.000253"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.145</var>
<status status="PASS" start="2026-08-15T23:49:18.057312" elapsed="0.002068"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.059960" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.059634" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.060697" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.060484" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.060773" elapsed="0.000046"/>
</return>
<msg time="2026-08-15T23:49:18.060944" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.060170" elapsed="0.000799"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.061116" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:18.059502" elapsed="0.001877"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.061941" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.061629" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.062720" level="INFO">${encoded} = 2830</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.062512" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.062810" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:18.062966" level="INFO">${encoded_value} = 2830</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.062196" elapsed="0.000794"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.063143" elapsed="0.000394"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-15T23:49:18.061490" elapsed="0.002089"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.064139" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.063838" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.064893" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.064665" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.064969" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:18.065120" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.064344" elapsed="0.000800"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.065336" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:49:18.063692" elapsed="0.001911"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.066200" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.065861" elapsed="0.000366"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.066948" level="INFO">${encoded} = admin</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.066720" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.067025" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:18.067174" level="INFO">${encoded_value} = admin</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.066408" elapsed="0.000790"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.067347" elapsed="0.000222"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-15T23:49:18.065715" elapsed="0.001894"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.068165" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.067866" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.068920" level="INFO">${encoded} = device-key</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.068692" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.068997" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:18.069147" level="INFO">${encoded_value} = device-key</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.068379" elapsed="0.000793"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.069323" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-15T23:49:18.067720" elapsed="0.001867"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.070177" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.069845" elapsed="0.000359"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.070925" level="INFO">${encoded} = /tmp/schema</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.070700" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.071002" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:49:18.071164" level="INFO">${encoded_value} = /tmp/schema</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.070387" elapsed="0.000801"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.071337" elapsed="0.000226"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-15T23:49:18.069699" elapsed="0.001904"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.072162" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.071858" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.072908" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.072684" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.072990" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:18.073141" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.072372" elapsed="0.000794"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.073319" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:18.071713" elapsed="0.001866"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:18.057121" elapsed="0.016493"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:18.073658" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:18.073832" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:18.055932" elapsed="0.017928"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.055605" elapsed="0.018288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.074098" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.073918" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.055584" elapsed="0.018672"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.075367" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:18.074467" elapsed="0.000929"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:18.075497" elapsed="0.000055"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:18.051052" elapsed="0.024727"/>
</kw>
<msg time="2026-08-15T23:49:18.075889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.036847" elapsed="0.039141"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.098369" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.123541" elapsed="0.000059"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.147458" elapsed="0.000048"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.147778" elapsed="0.000051"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.148014" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.148668" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.148388" elapsed="0.000366"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:18.148369" elapsed="0.000495"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.149074" elapsed="0.000046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.149407" elapsed="0.000046"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.149737" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:18.148325" elapsed="0.001609"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.148152" elapsed="0.001845"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.150179" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.150339" elapsed="0.000021"/>
</return>
<msg time="2026-08-15T23:49:18.150500" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:18.032334" elapsed="0.118194"/>
</kw>
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.179870" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.179421" elapsed="0.000483"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.180763" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.180481" elapsed="0.000384">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:18.180962" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:18.180130" elapsed="0.000857"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.181600" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/data.xml</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.181203" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.182009" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:18.182187" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:18.181863" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.182677" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.182422" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-15T23:49:18.183224" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.182875" elapsed="0.000410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.183759" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.145', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.183456" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.183311" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.182851" elapsed="0.001021"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.184791" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:18.184066" elapsed="0.000793"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:18.184961" elapsed="0.000058"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:18.178307" elapsed="0.006940"/>
</kw>
<msg time="2026-08-15T23:49:18.185337" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.163838" elapsed="0.021595"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.208104" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.231053" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.254068" elapsed="0.000049"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.254343" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.254540" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.255168" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.254895" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:18.254879" elapsed="0.000462"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.255544" elapsed="0.000046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.255911" elapsed="0.000046"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.256241" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:18.254842" elapsed="0.001565"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.254674" elapsed="0.001797"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.256622" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.256785" elapsed="0.000044"/>
</return>
<msg time="2026-08-15T23:49:18.256956" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${base_name}</arg>
<arg>extension=${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>endline=${endline}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from 1, by one  times.
Template variable ${j} is calculated as ${i} incremented by offset 0 ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:18.160941" elapsed="0.096047"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.259712" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.259160" elapsed="0.000754">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:18.260049" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:18.257749" elapsed="0.002325"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.260538" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.260185" elapsed="0.000506"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.262157" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.261414" elapsed="0.000786"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.260719" elapsed="0.001568"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.260165" elapsed="0.002146"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.265466" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.262465" elapsed="0.003029"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:18.265643" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:49:18.265883" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.257381" elapsed="0.008536"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.267780" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.267289" elapsed="0.000583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.268525" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.268052" elapsed="0.000547"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.269277" level="INFO">{'Content-Type': 'application/xml'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.268764" elapsed="0.000577"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.270021" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.269506" elapsed="0.000579"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:18.271650" level="INFO">${accumulator} = {'Content-Type': 'application/xml'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-15T23:49:18.271069" elapsed="0.000680"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-15T23:49:18.272628" level="INFO">${items_to_add} = ['Accept', 'application/xml']</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-08-15T23:49:18.272097" elapsed="0.000630"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.273032" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.274553" level="INFO">{'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.273791" elapsed="0.000962"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-15T23:49:18.274909" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:49:18.275196" level="INFO">${headers} = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-08-15T23:49:18.270329" elapsed="0.004895"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:18.298047" level="INFO">PUT Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.145&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-15T23:49:18.298197" level="INFO">PUT Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=201, reason=Created 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:18.298419" 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-08-15T23:49:18.283958" elapsed="0.014522"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.275335" elapsed="0.023311"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.298980" elapsed="0.000105"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.298687" elapsed="0.000576"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.275315" elapsed="0.023983"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.305414" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.301756" elapsed="0.003762"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.301034" elapsed="0.004556"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.300987" elapsed="0.004701"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.309985" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.306528" elapsed="0.003555"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.305840" elapsed="0.004404"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.305767" elapsed="0.004590"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.312044" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:18.311033" elapsed="0.001110"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.312822" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.312320" elapsed="0.000600"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.313780" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.313324" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.312988" elapsed="0.000903"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.312285" elapsed="0.001671"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.315476" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:18.314470" elapsed="0.001104"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.316206" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.315704" elapsed="0.000597"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.317379" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.316730" elapsed="0.000685"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.316392" elapsed="0.001072"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.315672" elapsed="0.001856"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.317776" elapsed="0.000827"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:49:18.319582" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:18.318938" elapsed="0.000742"/>
</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-08-15T23:49:18.319958" elapsed="0.002739"/>
</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-08-15T23:49:18.299977" elapsed="0.022899"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:49:18.323113" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-08-15T23:49:18.322966" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.322946" elapsed="0.000304"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.323404" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.323510" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:18.325853" 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-08-15T23:49:18.266365" elapsed="0.059516"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:49:18.325945" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:18.326099" 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-08-15T23:49:18.021161" elapsed="0.304964"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.326495" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.326251" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.326233" elapsed="0.000355"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:49:18.326621" elapsed="0.000027"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="PASS" start="2026-08-15T23:49:18.018468" elapsed="0.308276"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.018233" elapsed="0.308554"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.017719" elapsed="0.309112"/>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.326978" elapsed="0.000243"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="PASS" start="2026-08-15T23:49:17.990227" elapsed="0.337056"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="PASS" start="2026-08-15T23:49:17.988946" elapsed="0.338441"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.328028" level="INFO">&amp;{mapping} = { DEVICE_NAME=test-device | RESTCONF_ROOT=/rests }</msg>
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.327549" elapsed="0.000507"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.348028" elapsed="0.000789"/>
</kw>
<msg time="2026-08-15T23:49:18.348872" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.347652" elapsed="0.001274"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.347261" elapsed="0.001741"/>
</kw>
<msg time="2026-08-15T23:49:18.349044" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.338548" elapsed="0.010541"/>
</kw>
<msg time="2026-08-15T23:49:18.349191" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.338221" elapsed="0.010995"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.398059" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.397454" elapsed="0.000653"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.399214" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.398960" elapsed="0.000333">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:18.399488" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:18.398485" elapsed="0.001048"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.400485" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.399892" elapsed="0.000640"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.401248" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:18.401502" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:18.401002" elapsed="0.000546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.402256" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.401890" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.403692" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.403277" elapsed="0.000461"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.404184" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.403914" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.404958" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.404579" elapsed="0.000405"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.405702" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.405484" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.405841" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:49:18.406002" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.405170" elapsed="0.000857"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.406216" elapsed="0.000238"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:18.404445" elapsed="0.002050"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.407074" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:18.406743" elapsed="0.000357"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:18.407841" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.407595" elapsed="0.000274"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:18.407919" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:18.408069" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:18.407284" elapsed="0.000810"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:18.408240" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:18.406611" elapsed="0.001891"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:18.404266" elapsed="0.004271"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:18.408582" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:18.408736" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:18.402953" elapsed="0.005809"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.402502" elapsed="0.006331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.409102" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.408894" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.402459" elapsed="0.006775"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.410342" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:18.409528" elapsed="0.000861"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:18.410518" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:18.395917" elapsed="0.014832"/>
</kw>
<msg time="2026-08-15T23:49:18.410933" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:18.381587" elapsed="0.029400"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.423763" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.436425" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.449229" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.449459" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.449634" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.450127" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.449911" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:18.449896" elapsed="0.000464"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.450538" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.450877" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.451229" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:18.449866" elapsed="0.001561"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.449711" elapsed="0.001746"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.451602" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.451685" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:18.451824" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:18.377303" elapsed="0.074549"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.453430" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.453054" elapsed="0.000563">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:18.453838" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:18.452536" elapsed="0.001330"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.454183" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.453938" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.455298" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:18.454566" elapsed="0.000773"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:18.454395" elapsed="0.001052"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.453919" elapsed="0.001553"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.462109" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:18.455626" elapsed="0.006511"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:18.462190" elapsed="0.000043"/>
</return>
<msg time="2026-08-15T23:49:18.462360" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.452209" elapsed="0.010176"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:18.464054" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.463601" elapsed="0.000638">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:18.464420" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:18.463112" elapsed="0.001333"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:18.464656" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:49:18.464519" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:18.464499" elapsed="0.000275"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.464938" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.465107" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.465174" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:18.467171" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:18.462770" elapsed="0.004428"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.468884" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.468398" elapsed="0.000535"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:18.469540" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:18.469083" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:18.485661" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:18.486036" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=503, reason=Service Unavailable 
 headers={'Content-Type': 'application/xml', 'Content-Length': '417'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;protocol&lt;/error-type&gt;&lt;error-path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology/a:topology[a:topology-id='topology-netconf']/a:node[a:node-id='test-device']&lt;/error-path&gt;&lt;error-message&gt;Mount point does not exist&lt;/error-message&gt;&lt;error-tag&gt;resource-denied-transport&lt;/error-tag&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:18.486341" level="FAIL">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.471987" elapsed="0.015124">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:18.469653" elapsed="0.017730">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.487658" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.487434" elapsed="0.000486"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:18.469634" elapsed="0.018326">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.488606" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.488795" elapsed="0.000063"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:18.488741" elapsed="0.000158"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:18.488718" elapsed="0.000212"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.489134" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.489233" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.467562" elapsed="0.021823">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.489491" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.354432" elapsed="0.135194">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:18.490023" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:18.489754" elapsed="0.000428"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:18.489730" elapsed="0.000522"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:18.490302" elapsed="0.000023"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.349995" elapsed="0.140454">HTTPError: 503 Server Error: Service Unavailable for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.546483" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:21.545882" elapsed="0.000657"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:21.547629" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.547359" elapsed="0.000348">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:21.548036" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:21.546913" elapsed="0.001174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.549094" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:21.548429" elapsed="0.000713"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:21.549733" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:21.550181" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:21.549479" elapsed="0.000749"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.550939" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:21.550559" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.552256" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:21.551995" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.552724" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:21.552457" elapsed="0.000293"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.553439" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:21.553134" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:21.554223" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:21.553998" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:21.554302" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:21.554465" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:21.553652" elapsed="0.000838"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:21.554641" elapsed="0.000313"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:21.553001" elapsed="0.001994"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.555535" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:21.555239" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:21.556444" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:21.556233" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:21.556521" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:21.556730" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:21.555740" elapsed="0.001016"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:21.556921" elapsed="0.000231"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:21.555110" elapsed="0.002083"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:21.552822" elapsed="0.004407"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:21.557273" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:21.557428" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:21.551596" elapsed="0.005857"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:21.551195" elapsed="0.006318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.557783" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:21.557573" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:21.551148" elapsed="0.006791"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.559048" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:21.558238" elapsed="0.000860"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:21.559233" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:21.544299" elapsed="0.015167"/>
</kw>
<msg time="2026-08-15T23:49:21.559640" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:21.529929" elapsed="0.029765"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.572436" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.585272" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.597996" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.598193" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.598365" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.598850" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:21.598617" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:21.598602" elapsed="0.000469"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.599251" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.599597" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.599996" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:21.598572" elapsed="0.001621"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.598440" elapsed="0.001783"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.600369" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.600446" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:21.600567" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:21.525619" elapsed="0.074974"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:21.602206" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.601819" elapsed="0.000577">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:21.602577" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:21.601298" elapsed="0.001304"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.602992" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:21.602674" elapsed="0.000456"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.603900" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:21.603337" elapsed="0.000614"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:21.603158" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:21.602655" elapsed="0.001429"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.610779" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:21.604243" elapsed="0.006579"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:21.610877" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:21.611034" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:21.600972" elapsed="0.010087"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:21.612649" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.612283" elapsed="0.000564">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:21.613027" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:21.611706" elapsed="0.001347"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:21.613261" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:49:21.613125" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:21.613106" elapsed="0.000243"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.613491" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.613667" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.613733" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:21.615718" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:21.611384" elapsed="0.004361"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.617501" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:21.617048" elapsed="0.000501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:21.618167" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:21.617699" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:21.707440" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:21.708093" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:21.708552" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.620561" elapsed="0.088964">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:21.618278" elapsed="0.091748">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.710523" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:21.710117" elapsed="0.000838"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:21.618260" elapsed="0.092762">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.712344" elapsed="0.000116"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.712872" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:21.712732" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:21.712665" elapsed="0.000309"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.713181" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.713281" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.616166" elapsed="0.097276">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.713551" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.500291" elapsed="0.213400">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:21.714130" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:21.713867" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:21.713795" elapsed="0.000470"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:21.714309" elapsed="0.000020"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:21.491550" elapsed="0.222899">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.770909" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:24.770284" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:24.772061" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.771749" elapsed="0.000392">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:24.772336" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:24.771309" elapsed="0.001071"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.773335" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:24.772718" elapsed="0.000664"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:24.774017" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:24.774276" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:24.773734" elapsed="0.000587"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.775165" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:24.774647" elapsed="0.000613"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.776415" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:24.776158" elapsed="0.000302"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.776941" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:24.776615" elapsed="0.000353"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.777656" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:24.777334" elapsed="0.000348"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:24.778431" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:24.778207" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:24.778509" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:49:24.778670" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:24.777889" elapsed="0.000806"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:24.778864" elapsed="0.000245"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:24.777201" elapsed="0.001948"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.779691" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:24.779393" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:24.780604" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:24.780393" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:24.780680" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:24.780851" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:24.779942" elapsed="0.000934"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:24.781023" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:24.779264" elapsed="0.002018"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:24.777023" elapsed="0.004294"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:24.781361" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:24.781514" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:24.775824" elapsed="0.005727"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:24.775413" elapsed="0.006199"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.781902" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:24.781675" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:24.775367" elapsed="0.006717"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.783187" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:24.782383" elapsed="0.000852"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:24.783369" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:24.768671" elapsed="0.014931"/>
</kw>
<msg time="2026-08-15T23:49:24.783770" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:24.754329" elapsed="0.029515"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.796711" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.809463" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.822061" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.822263" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.822436" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.822923" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:24.822692" elapsed="0.000374"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:24.822677" elapsed="0.000466"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.823318" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.823628" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.823996" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:24.822647" elapsed="0.001545"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.822512" elapsed="0.001710"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.824370" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.824444" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:24.824575" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:24.749999" elapsed="0.074644"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:24.826313" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.825918" elapsed="0.000589">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:24.826686" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:24.825362" elapsed="0.001350"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.827093" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:24.826783" elapsed="0.000447"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.827970" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:24.827434" elapsed="0.000576"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:24.827258" elapsed="0.000861"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:24.826764" elapsed="0.001379"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.834938" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:24.828292" elapsed="0.006675"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:24.835022" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:49:24.835186" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:24.825028" elapsed="0.010183"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:24.836772" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.836395" elapsed="0.000648">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:24.837222" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:24.835898" elapsed="0.001350"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:24.837462" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:24.837320" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:24.837301" elapsed="0.000247"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.837705" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.837892" elapsed="0.000023"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.837960" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:24.839913" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:24.835549" elapsed="0.004391"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.841633" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:24.841151" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:24.842298" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:24.841847" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:24.932579" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:24.933303" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:24.933919" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.844633" elapsed="0.090255">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:24.842411" elapsed="0.092941">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.935783" elapsed="0.000094"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:24.935437" elapsed="0.000798"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:24.842394" elapsed="0.093912">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.937438" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.937772" elapsed="0.000087"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:24.937685" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:24.937645" elapsed="0.000334"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.938300" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.938470" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.840300" elapsed="0.098412">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.938923" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.724715" elapsed="0.214432">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:24.939745" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:24.939351" elapsed="0.000627"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:24.939313" elapsed="0.000721"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:24.940109" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:24.715524" elapsed="0.224813">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:27.996303" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:27.995616" elapsed="0.000749"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:27.997600" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:27.997245" elapsed="0.000438">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:27.997915" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:27.996764" elapsed="0.001198"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:27.999037" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:27.998309" elapsed="0.000778"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:27.999790" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:28.000086" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:27.999534" elapsed="0.000600"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.000901" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:28.000469" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.002207" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:28.001926" elapsed="0.000327"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.002681" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:28.002411" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.003531" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:28.003163" elapsed="0.000396"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:28.004510" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:28.004186" elapsed="0.000360"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:28.004619" elapsed="0.000049"/>
</return>
<msg time="2026-08-15T23:49:28.004892" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:28.003745" elapsed="0.001184"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:28.005140" elapsed="0.000333"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:28.003027" elapsed="0.002503"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.006325" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:28.005905" elapsed="0.000457"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:28.007609" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:28.007300" elapsed="0.000347"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:28.007717" elapsed="0.000042"/>
</return>
<msg time="2026-08-15T23:49:28.007969" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:28.006837" elapsed="0.001172"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:28.008219" elapsed="0.000313"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:28.005691" elapsed="0.002897"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:28.002765" elapsed="0.005872"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:28.008699" elapsed="0.000040"/>
</return>
<msg time="2026-08-15T23:49:28.008943" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:28.001580" elapsed="0.007400"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:28.001160" elapsed="0.007903"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.009441" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:28.009149" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:28.001114" elapsed="0.008515"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.011279" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:28.010079" elapsed="0.001272"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:28.011536" elapsed="0.000106"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:27.993952" elapsed="0.017952"/>
</kw>
<msg time="2026-08-15T23:49:28.012095" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:27.979445" elapsed="0.032709"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.025488" elapsed="0.000039"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.038152" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.050658" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.050902" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.051084" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.051632" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:28.051409" elapsed="0.000367"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:28.051391" elapsed="0.000491"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.052066" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.052387" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.052736" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:28.051347" elapsed="0.001606"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.051169" elapsed="0.001816"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.053134" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.053212" elapsed="0.000019"/>
</return>
<msg time="2026-08-15T23:49:28.053368" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:27.975159" elapsed="0.078239"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:28.055158" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:28.054696" elapsed="0.000685">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:28.055568" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:28.054139" elapsed="0.001455"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.056034" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:28.055673" elapsed="0.000501"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.057141" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:28.056417" elapsed="0.000778"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:28.056203" elapsed="0.001128"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:28.055654" elapsed="0.001711"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.064368" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:28.057533" elapsed="0.006863"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:28.064450" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:49:28.064609" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:28.053757" elapsed="0.010877"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:28.066438" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:28.066059" elapsed="0.000562">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:28.066816" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:28.065335" elapsed="0.001508"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:28.067053" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:28.066915" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:28.066896" elapsed="0.000241"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.067313" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.067484" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.067549" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:28.069520" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:28.065009" elapsed="0.004538"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.071234" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:28.070758" elapsed="0.000548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:28.071937" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:28.071458" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:28.164227" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:28.164784" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:28.165254" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:28.074275" elapsed="0.091928">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:28.072053" elapsed="0.094593">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.167188" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:28.166733" elapsed="0.000869"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:28.072034" elapsed="0.095633">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.168943" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.169260" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:28.169171" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:28.169132" elapsed="0.000271"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.169725" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.169926" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:28.069949" elapsed="0.100223">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.170340" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:27.951053" elapsed="0.219505">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:28.171237" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:28.170763" elapsed="0.000680"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:28.170725" elapsed="0.000773"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:28.171570" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:27.941528" elapsed="0.230269">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.228051" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:31.227412" elapsed="0.000697"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:31.229357" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.229062" elapsed="0.000389">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:31.229664" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:31.228522" elapsed="0.001188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.230775" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:31.230137" elapsed="0.000782"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:31.231516" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:31.231811" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:31.231260" elapsed="0.000602"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.232600" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:31.232214" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.233973" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:31.233691" elapsed="0.000327"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.234512" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:31.234233" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.235242" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:31.234939" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:31.236089" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:31.235768" elapsed="0.000347"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:31.236169" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:31.236335" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:31.235450" elapsed="0.000917"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:31.236524" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:31.234778" elapsed="0.002047"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.237415" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:31.237109" elapsed="0.000333"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:31.238324" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:31.238109" elapsed="0.000241"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:31.238402" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:31.238584" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:31.237624" elapsed="0.000985"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:31.238758" elapsed="0.000243"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:31.236974" elapsed="0.002068"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:31.234599" elapsed="0.004478"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:31.239121" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:31.239284" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:31.233363" elapsed="0.005952"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:31.232937" elapsed="0.006441"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.239653" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:31.239440" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:31.232866" elapsed="0.006921"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.240958" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:31.240114" elapsed="0.000896"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:31.241145" elapsed="0.000075"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:31.225782" elapsed="0.015601"/>
</kw>
<msg time="2026-08-15T23:49:31.241553" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:31.211172" elapsed="0.030434"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.254459" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.267349" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.280210" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.280437" elapsed="0.000027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.280653" elapsed="0.000030"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.281254" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:31.281026" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:31.281005" elapsed="0.000479"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.281663" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.282008" elapsed="0.000023"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.282360" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:31.280939" elapsed="0.001617"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.280752" elapsed="0.001834"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.282732" elapsed="0.000025"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.282835" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:49:31.282973" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:31.206786" elapsed="0.076215"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:31.284724" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.284271" elapsed="0.000742">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:31.285203" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:31.283711" elapsed="0.001518"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.285562" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:31.285303" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.286478" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:31.285944" elapsed="0.000581"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:31.285732" elapsed="0.000914"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:31.285283" elapsed="0.001389"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.293629" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:31.286911" elapsed="0.006746"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:31.293711" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:49:31.293929" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:31.283369" elapsed="0.010587"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:31.295601" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.295207" elapsed="0.000583">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:31.296011" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:31.294667" elapsed="0.001370"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:31.296248" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:31.296110" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:31.296092" elapsed="0.000243"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.296493" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.296664" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.296731" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:31.299065" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:31.294343" elapsed="0.004750"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.300905" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:31.300299" elapsed="0.000687"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:31.301614" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:31.301146" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:31.397872" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:31.398458" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:31.398970" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.303983" elapsed="0.095980">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:31.301731" elapsed="0.098691">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.400975" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:31.400515" elapsed="0.000895"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:31.301712" elapsed="0.099764">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.402593" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.402997" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:31.402897" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:31.402778" elapsed="0.000367"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.403466" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.403623" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.299460" elapsed="0.104455">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.404238" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.182975" elapsed="0.221517">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:31.405236" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:31.404706" elapsed="0.000710"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:31.404668" elapsed="0.000803"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:31.405545" elapsed="0.000035"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:31.172981" elapsed="0.232795">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.461877" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:34.461246" elapsed="0.000689"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:34.463076" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.462779" elapsed="0.000375">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:34.463356" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:34.462287" elapsed="0.001115"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.464363" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:34.463744" elapsed="0.000666"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:34.465021" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:34.465283" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:34.464749" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.466185" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:34.465661" elapsed="0.000620"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.467482" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:34.467224" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.468013" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:34.467684" elapsed="0.000356"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.468706" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:34.468409" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:34.469472" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:34.469249" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:34.469549" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:34.469712" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:34.468932" elapsed="0.000805"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:34.469964" elapsed="0.000248"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:34.468275" elapsed="0.001978"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.470850" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:34.470499" elapsed="0.000378"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:34.471588" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:34.471378" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:34.471664" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:34.471846" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:34.471061" elapsed="0.000811"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:34.472020" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:34.470369" elapsed="0.001912"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:34.468096" elapsed="0.004220"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:34.472361" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:34.472516" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:34.466888" elapsed="0.005654"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:34.466437" elapsed="0.006162"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.472901" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:34.472659" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:34.466392" elapsed="0.006645"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.474310" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:34.473333" elapsed="0.001025"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:34.474488" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:34.459641" elapsed="0.015093"/>
</kw>
<msg time="2026-08-15T23:49:34.474924" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:34.444729" elapsed="0.030252"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.487665" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.500385" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.513843" elapsed="0.000033"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.514113" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.514294" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.514854" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:34.514578" elapsed="0.000425"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:34.514561" elapsed="0.000521"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.515264" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.515617" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.515991" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:34.514524" elapsed="0.001670"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.514376" elapsed="0.001849"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.516376" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.516455" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:49:34.516593" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:34.440067" elapsed="0.076555"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:34.518529" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.518094" elapsed="0.000678">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:34.518982" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:34.517371" elapsed="0.001638"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.519342" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:34.519083" elapsed="0.000402"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.520227" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:34.519695" elapsed="0.000575"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:34.519514" elapsed="0.000866"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:34.519063" elapsed="0.001343"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.527390" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:34.520557" elapsed="0.006861"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:34.527471" elapsed="0.000033"/>
</return>
<msg time="2026-08-15T23:49:34.527634" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:34.517026" elapsed="0.010634"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:34.529265" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.528880" elapsed="0.000574">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:34.529638" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:34.528360" elapsed="0.001304"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:34.529904" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:34.529736" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:34.529716" elapsed="0.000273"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.530173" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.530346" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.530413" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:34.532683" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:34.528030" elapsed="0.004681"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.534421" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:34.533943" elapsed="0.000526"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:34.535145" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:34.534621" elapsed="0.000572"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:34.623973" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:34.624570" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:34.625080" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.537512" elapsed="0.088639">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:34.535263" elapsed="0.091374">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.627254" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:34.626754" elapsed="0.000922"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:34.535243" elapsed="0.092502">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.628988" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.629324" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:34.629228" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:34.629186" elapsed="0.000291"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.629863" elapsed="0.000055"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.630036" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.533095" elapsed="0.097206">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.630486" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.416245" elapsed="0.214670">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:34.631414" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:34.631169" elapsed="0.000377"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:34.631121" elapsed="0.000451"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:34.631605" elapsed="0.000016"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:34.406980" elapsed="0.224729">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.686071" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:37.685449" elapsed="0.000677"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:37.687201" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.686935" elapsed="0.000343">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:37.687475" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:37.686471" elapsed="0.001048"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.688506" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:37.687885" elapsed="0.000669"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:37.689296" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:37.689558" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:37.689042" elapsed="0.000561"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.690309" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:37.689947" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.691587" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:37.691331" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.692070" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:37.691787" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.692782" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:37.692486" elapsed="0.000393"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:37.693606" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:37.693383" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:37.693683" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:37.693861" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:37.693064" elapsed="0.000823"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:37.694036" elapsed="0.000239"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:37.692353" elapsed="0.001961"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.694878" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:37.694565" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:37.695606" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:37.695390" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:37.695681" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:37.695846" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:37.695082" elapsed="0.000789"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:37.696019" elapsed="0.000276"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:37.694436" elapsed="0.001911"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:37.692150" elapsed="0.004233"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:37.696431" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:37.696588" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:37.691009" elapsed="0.005604"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:37.690560" elapsed="0.006111"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.696962" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:37.696731" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:37.690515" elapsed="0.006581"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.698369" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:37.697395" elapsed="0.001022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:37.698548" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:37.683855" elapsed="0.014925"/>
</kw>
<msg time="2026-08-15T23:49:37.698971" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:37.669510" elapsed="0.029516"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.711685" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.724291" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.736922" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.737113" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.737287" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.737750" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:37.737539" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:37.737524" elapsed="0.000464"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.738163" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.738472" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.738841" elapsed="0.000053"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:37.737494" elapsed="0.001580"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.737361" elapsed="0.001742"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.739250" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.739326" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:37.739446" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:37.665186" elapsed="0.074286"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:37.741107" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.740710" elapsed="0.000584">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:37.741475" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:37.740176" elapsed="0.001325"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.741885" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:37.741573" elapsed="0.000451"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.742747" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:37.742226" elapsed="0.000561"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:37.742052" elapsed="0.000880"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:37.741554" elapsed="0.001403"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.749637" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:37.743107" elapsed="0.006558"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:37.749717" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:37.749888" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:37.739851" elapsed="0.010063"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:37.751489" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.751112" elapsed="0.000562">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:37.751871" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:37.750559" elapsed="0.001337"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:37.752105" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:49:37.751968" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:37.751949" elapsed="0.000238"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.752329" elapsed="0.000034"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.752508" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.752573" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:37.754712" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:37.750238" elapsed="0.004500"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.756445" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:37.755976" elapsed="0.000517"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:37.757177" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:37.756697" elapsed="0.000559"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:37.847775" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:37.848081" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:37.848265" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.759551" elapsed="0.089242">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:37.757326" elapsed="0.091687">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.849211" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:37.849051" elapsed="0.000335"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:37.757306" elapsed="0.092107">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.849902" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.850039" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:37.850001" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:37.849984" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.850242" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.850312" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.755143" elapsed="0.095277">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.850495" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.642091" elapsed="0.208500">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:37.850894" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:37.850681" elapsed="0.000286"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:37.850665" elapsed="0.000326"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:37.851023" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:37.632698" elapsed="0.218425">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.905015" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:40.904396" elapsed="0.000672"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:40.906247" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.905933" elapsed="0.000392">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:40.906524" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:40.905466" elapsed="0.001103"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.907525" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:40.906929" elapsed="0.000643"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:40.908279" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:40.908527" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:40.908031" elapsed="0.000541"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.909270" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:40.908912" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.910594" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:40.910337" elapsed="0.000303"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.911092" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:40.910813" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.911779" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:40.911483" elapsed="0.000394"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:40.912605" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:40.912385" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:40.912683" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:49:40.912860" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:40.912069" elapsed="0.000816"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:40.913034" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:40.911351" elapsed="0.001964"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.913873" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:40.913556" elapsed="0.000386"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:40.914667" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:40.914458" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:40.914742" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:40.914908" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:40.914147" elapsed="0.000786"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:40.915085" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:40.913429" elapsed="0.001917"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:40.911175" elapsed="0.004206"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:40.915424" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:40.915579" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:40.909978" elapsed="0.005627"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:40.909526" elapsed="0.006137"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.915952" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:40.915723" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:40.909480" elapsed="0.006608"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.917370" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:40.916390" elapsed="0.001060"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:40.917584" elapsed="0.000073"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:40.902841" elapsed="0.014994"/>
</kw>
<msg time="2026-08-15T23:49:40.918031" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:40.888575" elapsed="0.029513"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.930788" elapsed="0.000045"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.943372" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.955931" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.956124" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.956293" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.956762" elapsed="0.000083"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:40.956550" elapsed="0.000374"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:40.956535" elapsed="0.000466"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.957176" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.957490" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.957851" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:40.956505" elapsed="0.001565"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:40.956372" elapsed="0.001731"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.958250" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:40.958326" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:40.958445" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:40.884316" elapsed="0.074155"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:40.960099" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.959703" elapsed="0.000582">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:40.960464" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:40.959206" elapsed="0.001283"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.960868" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:40.960560" elapsed="0.000447"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.961698" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:40.961214" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:40.961035" elapsed="0.000848"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:40.960542" elapsed="0.001367"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.968493" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:40.962075" elapsed="0.006446"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:40.968573" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:40.968727" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:40.958884" elapsed="0.009868"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:40.970403" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.969942" elapsed="0.000649">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:40.970773" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:40.969435" elapsed="0.001379"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:40.971025" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:40.970889" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:40.970870" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.971257" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:40.971424" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:40.971490" elapsed="0.000015"/>
</return>
<msg time="2026-08-15T23:49:40.973675" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:40.969111" elapsed="0.004591"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.975396" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:40.974935" elapsed="0.000508"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:40.976064" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:40.975593" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:41.074218" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:41.074742" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:41.075185" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.978407" elapsed="0.097707">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:40.976177" elapsed="0.100439">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:41.077100" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:41.076697" elapsed="0.000793"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:40.976158" elapsed="0.101394">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:41.078615" elapsed="0.000059"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:41.079004" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:41.078915" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:41.078797" elapsed="0.000349"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:41.079465" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:41.079622" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.974104" elapsed="0.105796">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:41.080075" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.861365" elapsed="0.218928">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:41.080948" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:41.080494" elapsed="0.000618"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:41.080457" elapsed="0.000708"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:41.081237" elapsed="0.000033"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:40.852181" elapsed="0.229278">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.133531" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:44.132905" elapsed="0.000683"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:44.134700" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.134421" elapsed="0.000362">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:44.135017" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:44.133971" elapsed="0.001089"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.136075" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:44.135396" elapsed="0.000727"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:44.136706" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:44.137119" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:44.136455" elapsed="0.000711"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.137881" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:44.137491" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.139191" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:44.138925" elapsed="0.000313"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.139668" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:44.139396" elapsed="0.000310"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.140416" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:44.140107" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:44.141280" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:44.141030" elapsed="0.000277"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:44.141360" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:44.141524" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:44.140632" elapsed="0.000917"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:44.141700" elapsed="0.000277"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:44.139973" elapsed="0.002044"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.142562" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:44.142263" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:44.143373" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:44.143147" elapsed="0.000254"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:44.143458" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:44.143614" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:44.142771" elapsed="0.000868"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:44.143835" elapsed="0.000226"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:44.142132" elapsed="0.001970"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:44.139761" elapsed="0.004377"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:44.144181" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:44.144340" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:44.138536" elapsed="0.005830"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:44.138133" elapsed="0.006293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.144698" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:44.144488" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:44.138088" elapsed="0.006782"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.145998" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:44.145169" elapsed="0.000878"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:44.146177" elapsed="0.000074"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:44.131271" elapsed="0.015149"/>
</kw>
<msg time="2026-08-15T23:49:44.146601" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:44.116255" elapsed="0.030407"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.160035" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.172763" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.186008" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.186207" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.186381" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.186884" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:44.186647" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:44.186631" elapsed="0.000476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.187284" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.187599" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.188010" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:44.186597" elapsed="0.001610"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.186460" elapsed="0.001778"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.188396" elapsed="0.000024"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.188477" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:44.188602" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:44.111747" elapsed="0.076883"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:44.190324" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.189931" elapsed="0.000587">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:44.190700" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:44.189381" elapsed="0.001345"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.191113" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:44.190857" elapsed="0.000432"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.192131" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:44.191512" elapsed="0.000661"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:44.191319" elapsed="0.000963"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:44.190778" elapsed="0.001529"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.198977" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:44.192473" elapsed="0.006534"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:44.199060" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:44.199220" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:44.189029" elapsed="0.010216"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:44.200955" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.200480" elapsed="0.000665">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:44.201325" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:44.199971" elapsed="0.001381"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:44.201564" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:44.201426" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:44.201405" elapsed="0.000243"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.201793" elapsed="0.000056"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.201999" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.202066" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:44.204293" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:44.199574" elapsed="0.004747"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.206076" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:44.205580" elapsed="0.000546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:44.206736" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:44.206277" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:44.304858" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:44.305422" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:44.305916" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.209243" elapsed="0.097690">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:44.206884" elapsed="0.100521">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.308054" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:44.307497" elapsed="0.000986"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:44.206865" elapsed="0.101692">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.309782" elapsed="0.000130"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.310311" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:44.310213" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:44.310158" elapsed="0.000303"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.310878" elapsed="0.000060"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.311070" elapsed="0.000038"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.204694" elapsed="0.106655">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.311543" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.086773" elapsed="0.225119">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:44.312529" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:44.312124" elapsed="0.000481"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:44.312082" elapsed="0.000548"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:44.312663" elapsed="0.000016"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:44.082149" elapsed="0.230619">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.366765" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:47.366153" elapsed="0.000671"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:47.367938" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.367642" elapsed="0.000376">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:47.368215" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:47.367194" elapsed="0.001066"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.369281" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:47.368599" elapsed="0.000729"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:47.369983" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:47.370258" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:47.369660" elapsed="0.000643"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.371051" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:47.370634" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.372351" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:47.372091" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.372959" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:47.372624" elapsed="0.000362"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.373655" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:47.373355" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:47.374522" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:47.374237" elapsed="0.000311"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:47.374601" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:49:47.374766" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:47.373909" elapsed="0.000882"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:47.374962" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:47.373220" elapsed="0.002025"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.375793" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:47.375491" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:47.376544" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:47.376332" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:47.376618" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:47.376768" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:47.376020" elapsed="0.000773"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:47.376958" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:47.375360" elapsed="0.001859"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:47.373040" elapsed="0.004214"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:47.377298" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:47.377453" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:47.371704" elapsed="0.005775"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:47.371307" elapsed="0.006229"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.377807" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:47.377597" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:47.371260" elapsed="0.006702"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.379280" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:47.378261" elapsed="0.001072"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:47.379473" elapsed="0.000077"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:47.364548" elapsed="0.015165"/>
</kw>
<msg time="2026-08-15T23:49:47.379909" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:47.350252" elapsed="0.029715"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.393257" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.406208" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.419284" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.419482" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.419690" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.420199" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:47.419980" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:47.419964" elapsed="0.000457"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.420610" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.420952" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.421303" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:47.419933" elapsed="0.001568"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.419773" elapsed="0.001760"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.421681" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.421759" elapsed="0.000017"/>
</return>
<msg time="2026-08-15T23:49:47.421904" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:47.345712" elapsed="0.076219"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:47.423566" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.423174" elapsed="0.000633">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:47.424053" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:47.422618" elapsed="0.001461"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.424416" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:47.424152" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.425341" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:47.424775" elapsed="0.000608"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:47.424596" elapsed="0.000895"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:47.424133" elapsed="0.001384"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.432185" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:47.425668" elapsed="0.006546"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:47.432268" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:47.432426" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:47.422291" elapsed="0.010161"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:47.434097" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.433637" elapsed="0.000647">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:47.434502" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:47.433141" elapsed="0.001387"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:47.434741" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:47.434602" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:47.434583" elapsed="0.000272"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.435031" elapsed="0.000025"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.435204" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.435270" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:47.437500" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:47.432795" elapsed="0.004733"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.439233" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:47.438752" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:47.439945" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:47.439436" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:47.533667" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:47.534250" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:47.534651" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.442388" elapsed="0.093249">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:47.440063" elapsed="0.096061">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.536557" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:47.536205" elapsed="0.000784"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:47.440044" elapsed="0.097008">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.538155" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.538461" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:47.538376" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:47.538338" elapsed="0.000263"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.538982" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.539202" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.437941" elapsed="0.101507">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.539638" elapsed="0.000042"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.321755" elapsed="0.218117">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:47.540151" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:47.539969" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:47.539952" elapsed="0.000296"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:47.540281" elapsed="0.000015"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:47.313924" elapsed="0.226458">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Get_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.597073" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.596443" elapsed="0.000686"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:50.598244" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.597951" elapsed="0.000376">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:50.598528" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:50.597478" elapsed="0.001094"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.599539" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:50.598945" elapsed="0.000640"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:50.600231" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:50.600518" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:50.599976" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.601415" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.601054" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.602676" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.602418" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.603218" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.602943" elapsed="0.000301"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.603936" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:50.603618" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:50.604714" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.604489" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:50.604792" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:49:50.605017" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:50.604173" elapsed="0.000869"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.605193" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:50.603483" elapsed="0.001990"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.606095" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:50.605717" elapsed="0.000405"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:50.606849" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.606619" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:50.606926" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:50.607077" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:50.606306" elapsed="0.000796"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.607249" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:50.605589" elapsed="0.001922"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:50.603301" elapsed="0.004245"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:50.607590" elapsed="0.000027"/>
</return>
<msg time="2026-08-15T23:49:50.607746" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:50.602093" elapsed="0.005678"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.601670" elapsed="0.006185"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.608155" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.607919" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.601620" elapsed="0.006674"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.609581" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.608597" elapsed="0.001031"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:50.609760" elapsed="0.000096"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:50.594864" elapsed="0.015152"/>
</kw>
<msg time="2026-08-15T23:49:50.610184" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:50.580476" elapsed="0.029763"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.623005" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.635665" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.649133" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.649332" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.649504" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.650062" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.649842" elapsed="0.000362"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:50.649810" elapsed="0.000470"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.650456" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.650855" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.651229" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:50.649776" elapsed="0.001648"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.649614" elapsed="0.001838"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.651598" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.651697" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:49:50.651841" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:50.576197" elapsed="0.075672"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:50.653513" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.653140" elapsed="0.000560">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:50.653939" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:50.652602" elapsed="0.001362"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.654286" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.654037" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.655188" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.654629" elapsed="0.000599"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.654452" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.654018" elapsed="0.001341"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.661692" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:50.655509" elapsed="0.006210"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-15T23:49:50.661771" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:49:50.662182" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:50.652279" elapsed="0.009929"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:50.663736" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.663363" elapsed="0.000625">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-mount/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:50.664166" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:50.662871" elapsed="0.001321"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:49:50.664400" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:49:50.664263" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.664244" elapsed="0.000239"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.664628" elapsed="0.000021"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.664794" elapsed="0.000038"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.664912" elapsed="0.000018"/>
</return>
<msg time="2026-08-15T23:49:50.667070" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/ready/../../../variables/netconf/device/scandium/full-uri-mount/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:50.662532" elapsed="0.004565"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.668744" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.668288" elapsed="0.000503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.669439" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.668975" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:50.766163" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:50.766693" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount 
 status=400, reason=Bad Request 
 headers={'Content-Type': 'application/xml', 'Content-Length': '291'} 
 body=&lt;?xml version="1.0" ?&gt;&lt;errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"&gt;&lt;error&gt;&lt;error-type&gt;application&lt;/error-type&gt;&lt;error-message&gt;Transaction(GET) failed&lt;/error-message&gt;&lt;error-tag&gt;invalid-value&lt;/error-tag&gt;&lt;error-info&gt;Invalid value "aead" for union type.&lt;/error-info&gt;&lt;/error&gt;&lt;/errors&gt; 
 </msg>
<msg time="2026-08-15T23:49:50.767141" level="FAIL">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.671763" elapsed="0.096374">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-15T23:49:50.669553" elapsed="0.099018">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.769080" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.768653" elapsed="0.000815"/>
</branch>
<status status="FAIL" start="2026-08-15T23:49:50.669535" elapsed="0.099996">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.770608" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.771003" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:50.770911" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:50.770791" elapsed="0.000357"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.771498" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.771659" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.667458" elapsed="0.104494">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.772128" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.552109" elapsed="0.220239">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.773025" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.772554" elapsed="0.000638"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:50.772516" elapsed="0.000731"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.773318" elapsed="0.000034"/>
</return>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Add arguments sensible for XML data, return Get_Templated response text.
Optionally, verification against XML data (may be iterated) is called.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.541544" elapsed="0.232001">HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:49:50.773886" level="FAIL">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${timeout}</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}full-uri-mount</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.349376" elapsed="32.424728">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="FAIL" start="2026-08-15T23:49:18.328195" elapsed="32.446168">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.785194" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.785535" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.785718" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-15T23:49:50.785345" elapsed="0.000438"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.785282" elapsed="0.000530"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:50.787218" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="PASS" start="2026-08-15T23:49:50.786956" elapsed="0.000290"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.787886" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.787408" elapsed="0.000506"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:50.806620" elapsed="0.000968"/>
</kw>
<msg time="2026-08-15T23:49:50.807836" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:50.806257" elapsed="0.001649"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:50.805839" elapsed="0.002145"/>
</kw>
<msg time="2026-08-15T23:49:50.808026" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:50.797059" elapsed="0.011043"/>
</kw>
<msg time="2026-08-15T23:49:50.808211" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:49:50.796683" elapsed="0.011553"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.852058" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.851383" elapsed="0.000784"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-15T23:49:50.853783" level="FAIL">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-15T23:49:50.853285" elapsed="0.000637">File '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-15T23:49:50.854047" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:50.852470" elapsed="0.001682"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.855650" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:50.854502" elapsed="0.001260"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-15T23:49:50.856525" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:49:50.856757" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-15T23:49:50.856300" elapsed="0.000584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.857734" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.857202" elapsed="0.000597"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.860219" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.859873" elapsed="0.000405"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.860785" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.860490" elapsed="0.000491"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.862174" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:50.861595" elapsed="0.000606"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:50.863040" level="INFO">${encoded} = test-device</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.862782" elapsed="0.000285"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:50.863119" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:49:50.863280" level="INFO">${encoded_value} = test-device</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:50.862404" elapsed="0.000902"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.863457" elapsed="0.000239"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-15T23:49:50.861407" elapsed="0.002337"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.864386" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-15T23:49:50.864048" elapsed="0.000368"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:50.865283" level="INFO">${encoded} = /rests</msg>
<var>${encoded}</var>
<arg>${value}</arg>
<arg>:</arg>
<arg>%3A</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.865040" elapsed="0.000270"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-15T23:49:50.865360" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:49:50.865523" level="INFO">${encoded_value} = /rests</msg>
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="PASS" start="2026-08-15T23:49:50.864626" elapsed="0.000927"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.865706" elapsed="0.000256"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-15T23:49:50.863895" elapsed="0.002109"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-15T23:49:50.861137" elapsed="0.004927"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-15T23:49:50.866131" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:49:50.866502" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-15T23:49:50.858894" elapsed="0.007699"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.858101" elapsed="0.008571"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.866995" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.866752" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.858068" elapsed="0.009166"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.868368" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.867384" elapsed="0.001093"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-15T23:49:50.868702" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-15T23:49:50.850389" elapsed="0.018490"/>
</kw>
<msg time="2026-08-15T23:49:50.868976" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:50.837527" elapsed="0.031518"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.881741" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.894285" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.906805" elapsed="0.000038"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.907008" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.907178" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.907591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.907442" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:50.907426" elapsed="0.000246"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.907812" elapsed="0.000041"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.908000" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.908161" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-15T23:49:50.907396" elapsed="0.000816"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.907254" elapsed="0.000985"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.908380" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.908455" elapsed="0.000016"/>
</return>
<msg time="2026-08-15T23:49:50.908574" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-15T23:49:50.833191" elapsed="0.075409"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.909724" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.909474" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:50.922049" level="INFO">DELETE Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0adghuku7q8v91n6rxo67komud0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:50.922130" level="INFO">DELETE Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:50.922227" 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-08-15T23:49:50.912148" elapsed="0.010149"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.909865" elapsed="0.012475"/>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.922522" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.922367" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.909845" elapsed="0.012760"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.926436" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.923835" elapsed="0.002647"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.923590" elapsed="0.002926"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.923573" elapsed="0.002969"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.932102" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.927081" elapsed="0.005069"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.926597" elapsed="0.005587"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.926581" elapsed="0.005628"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.932760" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.932377" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.933117" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.932883" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.933748" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.933354" elapsed="0.000421"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.933198" elapsed="0.000630"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.932863" elapsed="0.000988"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.934369" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.934004" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.934727" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.934486" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.935383" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.934991" elapsed="0.000419"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.934812" elapsed="0.000633"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.934449" elapsed="0.001077"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:50.935671" elapsed="0.000480"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-15T23:49:50.936672" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.936314" elapsed="0.000385"/>
</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-08-15T23:49:50.936881" elapsed="0.005654"/>
</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-08-15T23:49:50.923155" elapsed="0.019449"/>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-15T23:49:50.942664" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:49:50.944995" 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-08-15T23:49:50.908881" elapsed="0.036141"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-15T23:49:50.945075" elapsed="0.000028"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="PASS" start="2026-08-15T23:49:50.808455" elapsed="0.136742"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="PASS" start="2026-08-15T23:49:50.786487" elapsed="0.158773"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="PASS" start="2026-08-15T23:49:50.786023" elapsed="0.159290"/>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-15T23:49:17.985483" elapsed="32.959915">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-15T23:49:17.985094" elapsed="32.960400">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-15T23:49:17.984719" elapsed="32.960838">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-15T23:49:17.984202" elapsed="32.961451">Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<msg time="2026-08-15T23:49:50.945744" level="FAIL">Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>10x</arg>
<arg>1s</arg>
<arg>Check_Netconf_Topology_Ready</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.293901" elapsed="340.651977">Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:50.947249" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:50.946860" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.946814" elapsed="0.000523"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:50.947484" elapsed="0.000321"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.954162" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.953653" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-15T23:49:50.954410" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:50.954265" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.954246" elapsed="0.000227"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.954978" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:50.954616" elapsed="0.000391"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-15T23:49:50.955484" level="INFO">${reference} = netconf_scale_max_devices_txt_Ready_Netconfready_Check_Whether_Netconf_Topology_Is_Ready</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.955166" elapsed="0.000345"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-15T23:49:50.955860" level="INFO">${reference} = netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-15T23:49:50.955665" elapsed="0.000222"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.956377" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.956036" elapsed="0.000368"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.956877" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:49:50.956554" elapsed="0.000351"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.957492" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"

Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-15T23:49:50.957055" elapsed="0.000490"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.958002" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:50.957692" elapsed="0.000396"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-08-15T23:49:50.953347" elapsed="0.004797"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:50.946581" elapsed="0.011613"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-15T23:49:50.946219" elapsed="0.012015"/>
</kw>
<doc>Checks netconf readiness.</doc>
<status status="FAIL" start="2026-08-15T23:44:10.155485" elapsed="340.802792">... click for list of related bugs or create a new one if needed (with the
"netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_scale_max_devices_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"

Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: Keyword 'TemplatedRequests.Get_As_Xml_Templated' failed after retrying for 30 seconds. The last error was: HTTPError: 400 Client Error: Bad Request for url: http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device/yang-ext:mount</status>
</test>
<test id="s1-s1-s1-t2" name="Wait_For_Netconf_Connector" line="97">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:49:50.961513" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:49:50.961251" elapsed="0.000522"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.962757" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:50.962648" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.962629" elapsed="0.000215"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.967975" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:50.967860" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.967841" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.969077" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:50.968662" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:49:50.969567" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:49:50.969266" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:49:50.969638" elapsed="0.000031"/>
</return>
<msg time="2026-08-15T23:49:50.969796" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:49:50.968275" elapsed="0.001564"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.975625" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:50.975516" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.975496" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:50.976952" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:50.976839" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:50.976800" elapsed="0.000220"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:50.977527" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:49:50.977164" elapsed="0.000390"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:49:50.977993" level="INFO">${current_connection_index} = 11</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:50.977718" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.063139" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:50.978577" elapsed="0.084741"/>
</kw>
<msg time="2026-08-15T23:49:51.063505" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:49:51.063555" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:50.978178" elapsed="0.085417"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.121045" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:49:51.064232" elapsed="0.057044"/>
</kw>
<msg time="2026-08-15T23:49:51.121452" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:49:51.121499" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.063775" elapsed="0.057764"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.121910" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.121621" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.121600" elapsed="0.000420"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.122542" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.122159" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.122922" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.122683" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.122665" elapsed="0.000362"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:49:51.123063" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.126316" elapsed="0.000153"/>
</kw>
<msg time="2026-08-15T23:49:51.126541" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.125590" elapsed="0.001055"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.127595" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.128573" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:49:51.124015" elapsed="0.004679"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:49:51.123367" elapsed="0.005620"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:49:50.976508" elapsed="0.152585"/>
</kw>
<msg time="2026-08-15T23:49:51.129188" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.129232" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:50.975867" elapsed="0.153404"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:49:51.129457" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.129349" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.129331" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.129986" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.130321" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.130393" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:49:50.975152" elapsed="0.155350"/>
</kw>
<msg time="2026-08-15T23:49:51.130597" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.130641" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:50.970221" elapsed="0.160458"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.131105" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.130753" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.130736" elapsed="0.000450"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:49:50.970076" elapsed="0.161133"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:49:50.969899" elapsed="0.161352"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:49:50.967470" elapsed="0.163838"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:49:50.962360" elapsed="0.169043"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:50.961938" elapsed="0.169518"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:49:50.959105" elapsed="0.172413"/>
</kw>
<if>
<branch type="IF" condition="not ${netconf_is_ready}">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:51.163160" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:51.163345" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0k7noei7f9oee15q2dz2y1k8zb1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 14-Aug-2026 23:49:51 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '990'} 
 body={"network-topology:topology":[{"topology-id":"topology-netconf","topology-types":{"netconf-node-topology:topology-netconf":{"ssh-transport-topology-parameters":{"mac":{"mac-alg":["hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"host-key":{"host-key-alg":["ecdsa-sha2-nistp256","ecdsa-sha2-nistp384","ecdsa-sha2-nistp521","ssh-ed25519","rsa-sha2-512","rsa-sha2-256","ssh-rsa"]},"key-exchange":{"key-exchange-alg":["sntrup761x25519-sha512","mlkem768x25519-sha256","mlkem1024nistp384-sha384","mlkem768nistp256-sha256","curve25519-sha256","curve448-sha512","ecdh-sha2-nistp521","ecdh-sha2-nistp384","ecdh-sha2-nistp256","diffie-hellman-group-exchange-sha256","diffie-hellman-group18-sha512","diffie-hellman-group17-sha512","diffie-hellman-group16-sha512","diffie-hellman-group15-sha512","diffie-hellman-group14-sha256"]},"encryption":{"encryption-alg":["chacha20-poly1305","aes128-ctr","aes192-ctr","aes256-ctr","AEAD_AES_128_GCM","AEAD_AES_256_GCM","aes128-cbc","aes192-cbc","aes256-cbc"]}}}}}]} 
 </msg>
<msg time="2026-08-15T23:49:51.163466" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-08-15T23:49:51.134913" elapsed="0.028579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.166219" level="INFO">{"network-topology:topology":[{"topology-id":"topology-netconf","topology-types":{"netconf-node-topology:topology-netconf":{"ssh-transport-topology-parameters":{"mac":{"mac-alg":["hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"host-key":{"host-key-alg":["ecdsa-sha2-nistp256","ecdsa-sha2-nistp384","ecdsa-sha2-nistp521","ssh-ed25519","rsa-sha2-512","rsa-sha2-256","ssh-rsa"]},"key-exchange":{"key-exchange-alg":["sntrup761x25519-sha512","mlkem768x25519-sha256","mlkem1024nistp384-sha384","mlkem768nistp256-sha256","curve25519-sha256","curve448-sha512","ecdh-sha2-nistp521","ecdh-sha2-nistp384","ecdh-sha2-nistp256","diffie-hellman-group-exchange-sha256","diffie-hellman-group18-sha512","diffie-hellman-group17-sha512","diffie-hellman-group16-sha512","diffie-hellman-group15-sha512","diffie-hellman-group14-sha256"]},"encryption":{"encryption-alg":["chacha20-poly1305","aes128-ctr","aes192-ctr","aes256-ctr","AEAD_AES_128_GCM","AEAD_AES_256_GCM","aes128-cbc","aes192-cbc","aes256-cbc"]}}}}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.163658" elapsed="0.002615"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.170412" level="FAIL">'{"network-topology:topology":[{"topology-id":"topology-netconf","topology-types":{"netconf-node-topology:topology-netconf":{"ssh-transport-topology-parameters":{"mac":{"mac-alg":["hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"host-key":{"host-key-alg":["ecdsa-sha2-nistp256","ecdsa-sha2-nistp384","ecdsa-sha2-nistp521","ssh-ed25519","rsa-sha2-512","rsa-sha2-256","ssh-rsa"]},"key-exchange":{"key-exchange-alg":["sntrup761x25519-sha512","mlkem768x25519-sha256","mlkem1024nistp384-sha384","mlkem768nistp256-sha256","curve25519-sha256","curve448-sha512","ecdh-sha2-nistp521","ecdh-sha2-nistp384","ecdh-sha2-nistp256","diffie-hellman-group-exchange-sha256","diffie-hellman-group18-sha512","diffie-hellman-group17-sha512","diffie-hellman-group16-sha512","diffie-hellman-group15-sha512","diffie-hellman-group14-sha256"]},"encryption":{"encryption-alg":["chacha20-poly1305","aes128-ctr","aes192-ctr","aes256-ctr","AEAD_AES_128_GCM","AEAD_AES_256_GCM","aes128-cbc","aes192-cbc","aes256-cbc"]}}}}}]}' does not contain 'data model content does not exist'</msg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="FAIL" start="2026-08-15T23:49:51.166840" elapsed="0.003687">'{"network-topology:topology":[{"topology-id":"topology-netconf","topology-types":{"netconf-node-topology:topology-netconf":{"ssh-transport-topology-parameters":{"mac":{"mac-alg":["hmac-sha2-256","hmac-sha2-512","hmac-sha1"]},"host-key":{"host-key-alg":["ecdsa-sha2-nistp256","ecdsa-sha2-nistp384","ecdsa-sha2-nistp521","ssh-ed25519","rsa-sha2-512","rsa-sha2-256","ssh-rsa"]},"key-exchange":{"key-exchange-alg":["sntrup761x25519-sha512","mlkem768x25519-sha256","mlkem1024nistp384-sha384","mlkem768nistp256-sha256","curve25519-sha256","curve448-sha512","ecdh-sha2-nistp521","ecdh-sha2-nistp384","ecdh-sha2-nistp256","diffie-hellman-group-exchange-sha256","diffie-hellman-group18-sha512","diffie-hellman-group17-sha512","diffie-hellman-group16-sha512","diffie-hellman-group15-sha512","diffie-hellman-group14-sha256"]},"encryption":{"encryption-alg":["chacha20-poly1305","aes128-ctr","aes192-ctr","aes256-ctr","AEAD_AES_128_GCM","AEAD_AES_256_GCM","aes128-cbc","aes192-cbc","aes256-cbc"]}}}}}]}' does not contain 'data model content does not exist'</status>
</kw>
<msg time="2026-08-15T23:49:51.170709" level="INFO">${status} = False</msg>
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:51.166434" elapsed="0.004310"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.171144" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.170871" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.170843" elapsed="0.000416"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.171649" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.171336" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.171313" elapsed="0.000516"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.175428" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-08-15T23:49:51.172056" elapsed="0.003458"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="PASS" start="2026-08-15T23:49:51.132455" elapsed="0.043142"/>
</kw>
<arg>${NETCONFREADY_WAIT}</arg>
<arg>1s</arg>
<arg>Check_Netconf_Up_And_Running</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:49:51.131852" elapsed="0.043808"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:51.131597" elapsed="0.044114"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.131578" elapsed="0.044172"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.176270" level="INFO">${netconf_is_ready} = True</msg>
<arg>${netconf_is_ready}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:49:51.175945" elapsed="0.000367"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.177546" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.177162" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.177145" elapsed="0.000488"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.177776" elapsed="0.000329"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.183408" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:51.182972" elapsed="0.000466"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-15T23:49:51.183663" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.183516" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.183496" elapsed="0.000256"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.183920" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.184091" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.184258" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.184424" 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-08-15T23:49:51.184601" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.184764" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.184944" elapsed="0.000021"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-08-15T23:49:51.182622" elapsed="0.002400"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:51.176953" elapsed="0.008119"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-15T23:49:51.176577" elapsed="0.008535"/>
</kw>
<doc>Wait for the Netconf to go up for configurable time.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-08-15T23:49:50.958535" elapsed="0.226620"/>
</test>
<test id="s1-s1-s1-t3" name="Wait_Even_Longer" line="105">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:49:51.188514" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:49:51.188233" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.189895" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.189758" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.189737" 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-08-15T23:49:51.195116" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.194978" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.194960" elapsed="0.000226"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.196257" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:51.195858" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.196751" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:49:51.196449" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:49:51.196843" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:49:51.197013" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:49:51.195421" 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-08-15T23:49:51.202793" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.202683" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.202661" elapsed="0.000219"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.204162" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.204052" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.204033" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:51.204763" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:49:51.204375" elapsed="0.000416"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.205219" level="INFO">${current_connection_index} = 11</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.204969" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.253461" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:51.205794" elapsed="0.047904"/>
</kw>
<msg time="2026-08-15T23:49:51.253981" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:49:51.254045" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.205403" elapsed="0.048697"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.280582" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ "L "o "n "g "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:49:51.254939" elapsed="0.025832"/>
</kw>
<msg time="2026-08-15T23:49:51.280973" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:49:51.281020" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.254337" elapsed="0.026721"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.281382" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.281138" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.281118" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.282043" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ "L "o "n "g "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.281628" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.282398" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.282182" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.282163" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:49:51.282534" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.285649" elapsed="0.000214"/>
</kw>
<msg time="2026-08-15T23:49:51.285935" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.284996" elapsed="0.001040"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.286983" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.288165" elapsed="0.000045"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:49:51.283432" elapsed="0.004862"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:49:51.282807" elapsed="0.005603"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:49:51.203698" elapsed="0.084818"/>
</kw>
<msg time="2026-08-15T23:49:51.288610" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.288655" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.203038" elapsed="0.085708"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:49:51.288968" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.288847" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.288814" elapsed="0.000240"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.289464" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.289929" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.290006" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:49:51.202332" elapsed="0.087789"/>
</kw>
<msg time="2026-08-15T23:49:51.290216" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.290259" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.197423" elapsed="0.092873"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.290622" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.290371" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.290354" elapsed="0.000347"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:49:51.197281" elapsed="0.093446"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:49:51.197096" elapsed="0.093663"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:49:51.194584" elapsed="0.096248"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:49:51.189414" elapsed="0.101477"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.188975" elapsed="0.101961"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:49:51.185940" elapsed="0.105049"/>
</kw>
<kw name="Pass Execution If" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.291453" level="INFO">Execution passed with message:
Netconf was detected to be up and running so bug 5014 did not show up.</msg>
<arg>${netconf_is_ready}</arg>
<arg>Netconf was detected to be up and running so bug 5014 did not show up.</arg>
<doc>Conditionally skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="PASS" start="2026-08-15T23:49:51.291153" elapsed="0.000358">Netconf was detected to be up and running so bug 5014 did not show up.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>${NETCONFREADY_FALLBACK_WAIT}</arg>
<arg>10s</arg>
<arg>Check_Netconf_Up_And_Running</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.291684" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.291900" elapsed="0.000021"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.293373" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.292997" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.292978" elapsed="0.000483"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.293623" elapsed="0.000344"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.299024" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:51.298600" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-15T23:49:51.299310" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.299165" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.299146" elapsed="0.000246"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.299537" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.299705" elapsed="0.000020"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.299889" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.300054" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.300215" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.300376" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.300534" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-08-15T23:49:51.298295" elapsed="0.002314"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:51.292540" elapsed="0.008119"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-15T23:49:51.292183" elapsed="0.008517"/>
</kw>
<doc>Bugs such as 7175 may require to wait longer till netconf-connector works.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-08-15T23:49:51.185384" elapsed="0.115354">Netconf was detected to be up and running so bug 5014 did not show up.</status>
</test>
<test id="s1-s1-s1-t4" name="Check_For_Bug_5014" line="114">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:49:51.304615" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:49:51.304357" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.305927" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.305801" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.305779" elapsed="0.000215"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.311292" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.311185" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.311167" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.312357" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:51.311975" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.312851" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:49:51.312539" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:49:51.312924" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:51.313077" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:49:51.311579" elapsed="0.001559"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.318961" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.318840" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.318805" elapsed="0.000228"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.320294" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.320179" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.320160" elapsed="0.000204"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:51.320909" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:49:51.320512" elapsed="0.000425"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.321424" level="INFO">${current_connection_index} = 11</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.321093" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.365758" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:51.322062" elapsed="0.044187"/>
</kw>
<msg time="2026-08-15T23:49:51.366625" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:49:51.366722" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.321620" elapsed="0.045145"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.393429" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ "B "u "g "_ "5 "0 "1 "4 "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:49:51.367346" elapsed="0.026260"/>
</kw>
<msg time="2026-08-15T23:49:51.393780" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:49:51.393851" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.366954" elapsed="0.026936"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.394193" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.393969" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.393948" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.394861" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ "B "u "g "_ "5 "0 "1 "4 "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.394437" elapsed="0.000495"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.395215" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.395000" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.394982" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:49:51.395350" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.398367" elapsed="0.000145"/>
</kw>
<msg time="2026-08-15T23:49:51.398584" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.397720" elapsed="0.001003"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.399654" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.400614" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:49:51.396245" elapsed="0.004491"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:49:51.395617" elapsed="0.005282"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:49:51.319864" elapsed="0.081134"/>
</kw>
<msg time="2026-08-15T23:49:51.401091" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.401135" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.319198" elapsed="0.081974"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:49:51.401356" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.401249" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.401230" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.401985" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.402324" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.402398" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:49:51.318425" elapsed="0.084083"/>
</kw>
<msg time="2026-08-15T23:49:51.402645" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.402727" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.313513" elapsed="0.089257"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.403124" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.402871" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.402852" elapsed="0.000350"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:49:51.313372" elapsed="0.089852"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:49:51.313196" elapsed="0.090059"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:49:51.310826" elapsed="0.092484"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:49:51.305512" elapsed="0.097852"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.305095" elapsed="0.098313"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:49:51.302194" elapsed="0.101267"/>
</kw>
<kw name="Pass Execution If" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.403997" level="INFO">Execution passed with message:
Netconf was detected to be up and running so bug 5014 did not show up.</msg>
<arg>${netconf_is_ready}</arg>
<arg>Netconf was detected to be up and running so bug 5014 did not show up.</arg>
<doc>Conditionally skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="PASS" start="2026-08-15T23:49:51.403621" elapsed="0.000428">Netconf was detected to be up and running so bug 5014 did not show up.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${error}</var>
<arg>Check_Netconf_Usable</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.404214" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.404454" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.404305" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:49:51.404288" elapsed="0.000244"/>
</if>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>'${status}'</arg>
<arg>'FAIL'</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.404668" elapsed="0.000020"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.406114" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.405723" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.405706" elapsed="0.000494"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.406342" elapsed="0.000311"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.411763" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:51.411346" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-15T23:49:51.412039" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.411886" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.411865" elapsed="0.000261"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.412275" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.412449" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.412627" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.412803" elapsed="0.000044"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.412996" elapsed="0.000022"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.413168" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.413364" elapsed="0.000020"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-08-15T23:49:51.411026" elapsed="0.002414"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:51.405330" elapsed="0.008165"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-15T23:49:51.404968" elapsed="0.008573"/>
</kw>
<doc>If Netconf appears to be down, it may be due to bug 5014. Check if it is so and fail if yes.
Bug 5014 is about Netconf playing dead on boot until a device
configuration request is sent to it. To uncover this attempt to
configure and then deconfigure a device and then check if Netconf
is now up and running. If that turns out to be true, fail the case
as this signifies the bug 5014 to be present. Skip this testcase
if Netconf is detected to be up and running.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-08-15T23:49:51.301010" elapsed="0.112572">Netconf was detected to be up and running so bug 5014 did not show up.</status>
</test>
<test id="s1-s1-s1-t5" name="Check_Whether_Netconf_Can_Pretty_Print" line="132">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:49:51.416966" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:49:51.416669" elapsed="0.000577"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.418288" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.418164" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.418145" elapsed="0.000211"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.423411" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.423299" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.423282" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.424548" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:51.424159" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.425048" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:49:51.424731" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:49:51.425119" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:49:51.425272" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:49:51.423700" 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-08-15T23:49:51.430944" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.430832" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.430800" elapsed="0.000213"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.432314" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.432199" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.432180" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:51.432899" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:49:51.432523" elapsed="0.000403"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.433322" level="INFO">${current_connection_index} = 11</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.433080" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.478664" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:51.433910" elapsed="0.044939"/>
</kw>
<msg time="2026-08-15T23:49:51.479033" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:49:51.479078" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.433503" elapsed="0.045612"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.516257" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "C "a "n "_ "P "r "e "t "t "y "_ "P "r "i "n "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:49:51.479667" elapsed="0.036772"/>
</kw>
<msg time="2026-08-15T23:49:51.516641" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:49:51.516715" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.479281" elapsed="0.037473"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.517077" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.516857" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.516835" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.517688" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "C "a "n "_ "P "r "e "t "t "y "_ "P "r "i "n "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.517320" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.518064" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.517851" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.517831" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:49:51.518198" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.521162" elapsed="0.000148"/>
</kw>
<msg time="2026-08-15T23:49:51.521379" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.520493" elapsed="0.000982"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.522404" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.523345" elapsed="0.000035"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:49:51.519053" elapsed="0.004405"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:49:51.518453" elapsed="0.005116"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:49:51.431895" elapsed="0.091771"/>
</kw>
<msg time="2026-08-15T23:49:51.523756" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.523803" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.431170" elapsed="0.092856"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:49:51.524211" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.524103" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.524084" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.524677" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.525059" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.525132" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:49:51.430482" elapsed="0.094757"/>
</kw>
<msg time="2026-08-15T23:49:51.525332" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.525376" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.425654" elapsed="0.099758"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.525737" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.525486" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.525469" elapsed="0.000410"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:49:51.425516" elapsed="0.100389"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:49:51.425350" elapsed="0.100585"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:49:51.422901" elapsed="0.103087"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:49:51.417853" elapsed="0.108233"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.417403" elapsed="0.108727"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:49:51.414395" elapsed="0.111791"/>
</kw>
<if>
<branch type="IF" condition="not ${netconf_is_ready}">
<kw name="Fail" owner="BuiltIn">
<arg>Netconf is not ready so it can't pretty-print now.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.526481" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.526256" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.526239" elapsed="0.000319"/>
</if>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:49:51.556926" level="INFO">GET Request : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf?odl-pretty-print=true 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf?odl-pretty-print=true 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0k7noei7f9oee15q2dz2y1k8zb1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-15T23:49:51.557106" level="INFO">GET Response : url=http://10.30.170.145:8181/rests/data/network-topology:network-topology/topology=topology-netconf?odl-pretty-print=true 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '1883'} 
 body={
  "network-topology:topology": [
    {
      "topology-id": "topology-netconf",
      "topology-types": {
        "netconf-node-topology:topology-netconf": {
          "ssh-transport-topology-parameters": {
            "mac": {
              "mac-alg": [
                "hmac-sha2-256",
                "hmac-sha2-512",
                "hmac-sha1"
              ]
            },
            "host-key": {
              "host-key-alg": [
                "ecdsa-sha2-nistp256",
                "ecdsa-sha2-nistp384",
                "ecdsa-sha2-nistp521",
                "ssh-ed25519",
                "rsa-sha2-512",
                "rsa-sha2-256",
                "ssh-rsa"
              ]
            },
            "key-exchange": {
              "key-exchange-alg": [
                "sntrup761x25519-sha512",
                "mlkem768x25519-sha256",
                "mlkem1024nistp384-sha384",
                "mlkem768nistp256-sha256",
                "curve25519-sha256",
                "curve448-sha512",
                "ecdh-sha2-nistp521",
                "ecdh-sha2-nistp384",
                "ecdh-sha2-nistp256",
                "diffie-hellman-group-exchange-sha256",
                "diffie-hellman-group18-sha512",
                "diffie-hellman-group17-sha512",
                "diffie-hellman-group16-sha512",
                "diffie-hellman-group15-sha512",
                "diffie-hellman-group14-sha256"
              ]
            },
            "encryption": {
              "encryption-alg": [
                "chacha20-poly1305",
                "aes128-ctr",
                "aes192-ctr",
                "aes256-ctr",
                "AEAD_AES_128_GCM",
                "AEAD_AES_256_GCM",
                "aes128-cbc",
                "aes192-cbc",
                "aes256-cbc"
              ]
            }
          }
        }
      }
    }
  ]
} 
 </msg>
<msg time="2026-08-15T23:49:51.557215" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-08-15T23:49:51.547306" elapsed="0.009936"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.562983" level="INFO">{
  "network-topology:topology": [
    {
      "topology-id": "topology-netconf",
      "topology-types": {
        "netconf-node-topology:topology-netconf": {
          "ssh-transport-topology-parameters": {
            "mac": {
              "mac-alg": [
                "hmac-sha2-256",
                "hmac-sha2-512",
                "hmac-sha1"
              ]
            },
            "host-key": {
              "host-key-alg": [
                "ecdsa-sha2-nistp256",
                "ecdsa-sha2-nistp384",
                "ecdsa-sha2-nistp521",
                "ssh-ed25519",
                "rsa-sha2-512",
                "rsa-sha2-256",
                "ssh-rsa"
              ]
            },
            "key-exchange": {
              "key-exchange-alg": [
                "sntrup761x25519-sha512",
                "mlkem768x25519-sha256",
                "mlkem1024nistp384-sha384",
                "mlkem768nistp256-sha256",
                "curve25519-sha256",
                "curve448-sha512",
                "ecdh-sha2-nistp521",
                "ecdh-sha2-nistp384",
                "ecdh-sha2-nistp256",
                "diffie-hellman-group-exchange-sha256",
                "diffie-hellman-group18-sha512",
                "diffie-hellman-group17-sha512",
                "diffie-hellman-group16-sha512",
                "diffie-hellman-group15-sha512",
                "diffie-hellman-group14-sha256"
              ]
            },
            "encryption": {
              "encryption-alg": [
                "chacha20-poly1305",
                "aes128-ctr",
                "aes192-ctr",
                "aes256-ctr",
                "AEAD_AES_128_GCM",
                "AEAD_AES_256_GCM",
                "aes128-cbc",
                "aes192-cbc",
                "aes256-cbc"
              ]
            }
          }
        }
      }
    }
  ]
}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.557437" elapsed="0.005681"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.568360" level="FAIL">'{
  "network-topology:topology": [
    {
      "topology-id": "topology-netconf",
      "topology-types": {
        "netconf-node-topology:topology-netconf": {
          "ssh-transport-topology-parameters": {
            "mac": {
              "mac-alg": [
                "hmac-sha2-256",
                "hmac-sha2-512",
                "hmac-sha1"
              ]
            },
            "host-key": {
              "host-key-alg": [
                "ecdsa-sha2-nistp256",
                "ecdsa-sha2-nistp384",
                "ecdsa-sha2-nistp521",
                "ssh-ed25519",
                "rsa-sha2-512",
                "rsa-sha2-256",
                "ssh-rsa"
              ]
            },
            "key-exchange": {
              "key-exchange-alg": [
                "sntrup761x25519-sha512",
                "mlkem768x25519-sha256",
                "mlkem1024nistp384-sha384",
                "mlkem768nistp256-sha256",
                "curve25519-sha256",
                "curve448-sha512",
                "ecdh-sha2-nistp521",
                "ecdh-sha2-nistp384",
                "ecdh-sha2-nistp256",
                "diffie-hellman-group-exchange-sha256",
                "diffie-hellman-group18-sha512",
                "diffie-hellman-group17-sha512",
                "diffie-hellman-group16-sha512",
                "diffie-hellman-group15-sha512",
                "diffie-hellman-group14-sha256"
              ]
            },
            "encryption": {
              "encryption-alg": [
                "chacha20-poly1305",
                "aes128-ctr",
                "aes192-ctr",
                "aes256-ctr",
                "AEAD_AES_128_GCM",
                "AEAD_AES_256_GCM",
                "aes128-cbc",
                "aes192-cbc",
                "aes256-cbc"
              ]
            }
          }
        }
      }
    }
  ]
}' does not contain 'data model content does not exist'</msg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="FAIL" start="2026-08-15T23:49:51.564282" elapsed="0.004206">'{
  "network-topology:topology": [
    {
      "topology-id": "topology-netconf",
      "topology-types": {
        "netconf-node-topology:topology-netconf": {
          "ssh-transport-topology-parameters": {
            "mac": {
              "mac-alg": [
                "hmac-sha2-256",
                "hmac-sha2-512",
                "hmac-sha1"
              ]
            },
            "host-key": {
              "host-key-alg": [
                "ecdsa-sha2-nistp256",
                "ecdsa-sha2-nistp384",
                "ecdsa-sha2-nistp521",
                "ssh-ed25519",
    [ Message content over the limit has been removed. ]
            },
            "encryption": {
              "encryption-alg": [
                "chacha20-poly1305",
                "aes128-ctr",
                "aes192-ctr",
                "aes256-ctr",
                "AEAD_AES_128_GCM",
                "AEAD_AES_256_GCM",
                "aes128-cbc",
                "aes192-cbc",
                "aes256-cbc"
              ]
            }
          }
        }
      }
    }
  ]
}' does not contain 'data model content does not exist'</status>
</kw>
<msg time="2026-08-15T23:49:51.568590" level="INFO">${status} = False</msg>
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-15T23:49:51.563473" elapsed="0.005141"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.568900" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.568688" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.568669" elapsed="0.000315"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.569262" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.569038" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.569022" elapsed="0.000323"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.571889" level="INFO">Argument types are:
&lt;class 'int'&gt;
&lt;class 'str'&gt;</msg>
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="PASS" start="2026-08-15T23:49:51.569483" elapsed="0.002464"/>
</kw>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="PASS" start="2026-08-15T23:49:51.546917" elapsed="0.025089"/>
</kw>
<msg time="2026-08-15T23:49:51.572045" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.546216" elapsed="0.025878"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Check_Netconf_Up_And_Running [] {'pretty_print': 'odl-pretty-print=true'} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:49:51.545659" elapsed="0.026508"/>
</kw>
<msg time="2026-08-15T23:49:51.572211" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.536694" elapsed="0.035560"/>
</kw>
<arg>Check_Netconf_Up_And_Running</arg>
<arg>pretty_print=odl-pretty-print=true</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:49:51.536312" elapsed="0.036013"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.573559" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.573183" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.573165" elapsed="0.000479"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.573831" elapsed="0.000319"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.579147" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:49:51.578718" elapsed="0.000457"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-15T23:49:51.579392" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.579248" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.579230" elapsed="0.000242"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.579616" elapsed="0.000021"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.579782" 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-08-15T23:49:51.579969" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.580129" elapsed="0.000019"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.580289" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.580488" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.580648" elapsed="0.000019"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-08-15T23:49:51.578419" elapsed="0.002303"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:51.572960" elapsed="0.007812"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-15T23:49:51.572585" elapsed="0.008242"/>
</kw>
<doc>Make one request to netconf-connector and see if it works.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-08-15T23:49:51.413836" elapsed="0.167032"/>
</test>
<test id="s1-s1-s1-t6" name="Wait_For_MDSAL" line="141">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:49:51.584167" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:49:51.583907" elapsed="0.000520"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.585394" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.585285" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.585267" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.590487" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.590380" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.590363" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.591550" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:49:51.591162" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.592047" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:49:51.591733" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:49:51.592118" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:49:51.592270" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:49:51.590774" elapsed="0.001520"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.597750" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.597632" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.597613" elapsed="0.000222"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.599065" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.598953" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.598935" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:49:51.599626" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:49:51.599274" elapsed="0.000378"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.600069" level="INFO">${current_connection_index} = 11</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.599810" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.638697" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:51.600632" elapsed="0.038280"/>
</kw>
<msg time="2026-08-15T23:49:51.639093" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:49:51.639140" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.600251" elapsed="0.038927"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.674328" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M "D "S "A "L "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:49:51.639729" elapsed="0.034773"/>
</kw>
<msg time="2026-08-15T23:49:51.674670" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:49:51.674750" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.639345" elapsed="0.035444"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.675110" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.674891" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.674871" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:51.675747" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M "D "S "A "L "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:51.675349" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.676113" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.675901" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.675882" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:49:51.676247" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:49:51.679195" elapsed="0.000146"/>
</kw>
<msg time="2026-08-15T23:49:51.679411" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:51.678571" elapsed="0.000937"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.680473" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.681429" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:49:51.677099" elapsed="0.004444"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:49:51.676500" elapsed="0.005156"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:49:51.598623" elapsed="0.083130"/>
</kw>
<msg time="2026-08-15T23:49:51.682026" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.682072" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.597984" elapsed="0.084126"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:49:51.682292" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:49:51.682185" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.682166" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.682763" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.683113" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.683184" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:49:51.597302" elapsed="0.085988"/>
</kw>
<msg time="2026-08-15T23:49:51.683385" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:51.683428" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.592654" elapsed="0.090811"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:51.683884" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:51.683539" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.683523" elapsed="0.000443"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:49:51.592515" elapsed="0.091473"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:49:51.592348" elapsed="0.091670"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:49:51.589999" elapsed="0.094072"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:49:51.585003" elapsed="0.099121"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.584573" elapsed="0.099629"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:49:51.581512" elapsed="0.102742"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Verify_Feature_Is_Installed" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.689364" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.689256" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.689238" elapsed="0.000194"/>
</if>
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:49:51.693593" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:49:51.693486" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:51.693468" elapsed="0.000192"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:49:51.693807" elapsed="0.000442"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-15T23:49:51.694674" level="INFO">Logging into '10.30.170.145:8101' as 'karaf'.</msg>
<msg time="2026-08-15T23:49:51.951339" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-08-15T23:49:51.694413" elapsed="0.257248"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:49:52.009288" level="INFO">@root&gt;feature:list -i | 0[C 0g[Krep odl-netconf-mdsal</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:51.952295" elapsed="0.057066"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:49:52.052419" level="INFO">[?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 10.0.3           x          x Started x odl-netconf-10.0.3                                              x [31;1modl-netconf-mdsal[0m-common
[31;1modl-netconf-mdsal[0m                                               x 10.0.3           x x        x Started x [31;1modl-netconf-mdsal[0m                                               x OpenDaylight :: Netconf :: Mdsal
[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-08-15T23:49:52.052544" level="INFO">${output} = [?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 10.0.3           x          x Started x odl-netconf-10.0.3                                          ...</msg>
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:49:52.009537" elapsed="0.043037"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-08-15T23:49:52.052742" elapsed="0.000221"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:49:52.053130" elapsed="0.000236"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:49:52.053956" level="INFO">[?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 10.0.3           x          x Started x odl-netconf-10.0.3                                              x [31;1modl-netconf-mdsal[0m-common
[31;1modl-netconf-mdsal[0m                                               x 10.0.3           x x        x Started x [31;1modl-netconf-mdsal[0m                                               x OpenDaylight :: Netconf :: Mdsal
[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:49:52.053533" elapsed="0.000486"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:49:52.054073" elapsed="0.000059"/>
</return>
<msg time="2026-08-15T23:49:52.054285" level="INFO">${output} = [?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 10.0.3           x          x Started x odl-netconf-10.0.3                                          ...</msg>
<var>${output}</var>
<arg>feature:list -i | grep ${feature_name}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.170.145
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-08-15T23:49:51.693101" elapsed="0.361217"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${feature_name}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-15T23:49:52.054487" elapsed="0.000404"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:49:52.054943" elapsed="0.000029"/>
</return>
<arg>odl-netconf-mdsal</arg>
<doc>Will Succeed if the given ${feature_name} is found in the output of "feature:list -i"</doc>
<status status="PASS" start="2026-08-15T23:49:51.688953" elapsed="0.366118"/>
</kw>
<msg time="2026-08-15T23:49:52.055181" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:49:52.055255" level="INFO">${message} = [?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 10.0.3           x          x Started x odl-netconf-10.0.3                                          ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>KarafKeywords.Verify_Feature_Is_Installed</arg>
<arg>odl-netconf-mdsal</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:51.684414" elapsed="0.370870"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<kw name="Pass Execution" owner="BuiltIn">
<arg>The 'odl-netconf-mdsal' feature is not installed so no need to wait for it.</arg>
<doc>Skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="NOT RUN" start="2026-08-15T23:49:52.055975" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:49:52.055659" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:52.055630" elapsed="0.000439"/>
</if>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:49:52.061508" level="INFO">${odl_connection} = 13</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:49:52.061089" elapsed="0.000446"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:49:52.063405" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:49:52.063484" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:49:52.063135" elapsed="0.000380"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:52.063675" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:49:52.064933" level="INFO">Logging into '10.30.170.145:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:49:52.669462" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:49:52 UTC 2026

  System load:  0.36               Processes:             151
  Usage of /:   7.0% of 154.88GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.145
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Aug 15 23:44:09 2026 from 10.30.171.53
[?2004h[jenkins@releng-59795-54-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-08-15T23:49:52.064594" elapsed="0.605032"/>
</kw>
<msg time="2026-08-15T23:49:52.669718" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:52.064233" elapsed="0.605576"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:49:52.062614" elapsed="0.607330"/>
</kw>
<msg time="2026-08-15T23:49:52.669996" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:49:52.062192" elapsed="0.607853"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-15T23:49:52.061741" elapsed="0.608391"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-15T23:49:52.670190" elapsed="0.000042"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-15T23:49:52.060675" elapsed="0.609691"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_MDSAL_Up_And_Running">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:49:52.672890" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:49:52.685523" level="INFO">Command exited with return code 127.</msg>
<msg time="2026-08-15T23:49:52.685753" level="INFO">${netstat_installed} = </msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:49:52.672753" elapsed="0.013094"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:49:52.687741" level="INFO">Executing command 'sudo apt-get update'.</msg>
<msg time="2026-08-15T23:50:02.913359" level="INFO">Command exited with return code 0.</msg>
<arg>sudo apt-get update</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:49:52.687462" elapsed="10.226172"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:50:02.914518" level="INFO">Executing command 'sudo apt-get install -y net-tools'.</msg>
<msg time="2026-08-15T23:50:11.161166" level="INFO">Command exited with return code 0.</msg>
<arg>sudo apt-get install -y net-tools</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:50:02.914195" elapsed="8.247215"/>
</kw>
<doc>Install netstat if it is not already installed.</doc>
<status status="PASS" start="2026-08-15T23:49:52.686845" elapsed="18.474754"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:52.686024" elapsed="18.475642"/>
</branch>
<status status="PASS" start="2026-08-15T23:49:52.685974" elapsed="18.475771"/>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="PASS" start="2026-08-15T23:49:52.672474" elapsed="18.489430"/>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:49:52.672056" elapsed="18.489951"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.163038" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":2830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:50:11.228156" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:50:11.228405" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:50:11.162443" elapsed="0.066018"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:50:11.228741" elapsed="0.000133"/>
</return>
<msg time="2026-08-15T23:50:11.229208" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${ODL_NETCONF_MDSAL_PORT}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:49:52.671665" elapsed="18.557600"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:50:11.229634" elapsed="0.000857"/>
</kw>
<status status="PASS" start="2026-08-15T23:49:52.671259" elapsed="18.559377"/>
</kw>
<arg>${NETCONFREADY_WAIT_MDSAL}</arg>
<arg>1s</arg>
<arg>Check_Netconf_MDSAL_Up_And_Running</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:49:52.670601" elapsed="18.560123"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.231166" elapsed="0.000506"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.234189" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:11.233599" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.233573" elapsed="0.000739"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.234516" elapsed="0.000478"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.242168" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:50:11.241731" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-15T23:50:11.242423" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-15T23:50:11.242272" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.242252" elapsed="0.000256"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.242657" elapsed="0.000022"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.242844" elapsed="0.000021"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.243015" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.243180" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.243345" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.243508" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.243670" elapsed="0.000021"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-08-15T23:50:11.241420" elapsed="0.002328"/>
</kw>
<status status="PASS" start="2026-08-15T23:50:11.233276" elapsed="0.010536"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-15T23:50:11.232335" elapsed="0.011523"/>
</kw>
<doc>Wait for the MDSAL feature to become online</doc>
<status status="PASS" start="2026-08-15T23:49:51.581076" elapsed="19.662823"/>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.251207" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.251095" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.251077" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.252268" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:50:11.251871" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.252782" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:50:11.252453" elapsed="0.000376"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:50:11.252882" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:50:11.253040" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:50:11.251516" elapsed="0.001682"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.258748" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.258638" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.258620" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.259946" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.259835" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.259816" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:50:11.260385" level="INFO">${karaf_connection_index} = 7</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.260161" elapsed="0.000259"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.260774" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:50:11.260574" elapsed="0.000245"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.302352" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "E "n "d "i "n "g "[C "N "e "t "c "o "n "f "[C "r "e "a "d "i "n "e "s "s "[C "t "e "s "t "[C "s "[78Cu "[A[78Ci</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:50:11.261337" elapsed="0.041104"/>
</kw>
<msg time="2026-08-15T23:50:11.302546" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:50:11.302645" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "E "n "d "i "n "g "[C "N "e "t "c "o "n "f "[C "r "e "a "d "i "n "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.260986" elapsed="0.041701"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.311574" level="INFO">"t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:50:11.303238" elapsed="0.008402"/>
</kw>
<msg time="2026-08-15T23:50:11.311742" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:50:11.311786" level="INFO">${message_wait} =  "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.302888" elapsed="0.008943"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.312139" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:11.311912" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.311891" elapsed="0.000340"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.312633" level="INFO"> "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:11.312374" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.313014" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:11.312782" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.312763" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:50:11.313130" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.314242" elapsed="0.000384"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.314790" elapsed="0.000191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.315133" elapsed="0.000100"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:50:11.313927" elapsed="0.001358"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:50:11.313406" elapsed="0.001924"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:50:11.259561" elapsed="0.055865"/>
</kw>
<msg time="2026-08-15T23:50:11.315517" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:11.315561" level="INFO">${message} =  "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.259039" elapsed="0.056551"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:50:11.315779" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-08-15T23:50:11.315665" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.315647" elapsed="0.000234"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.316323" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.316650" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.316739" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:50:11.258352" elapsed="0.058528"/>
</kw>
<msg time="2026-08-15T23:50:11.316976" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:11.317019" level="INFO">${output} =  "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.253634" elapsed="0.063414"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.317386" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:11.317129" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.317112" elapsed="0.000352"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:50:11.253489" elapsed="0.063998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:50:11.253301" elapsed="0.064218"/>
</for>
<arg>Ending Netconf readiness test suite</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:50:11.249074" elapsed="0.068499"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-15T23:50:11.317824" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-15T23:50:11.317724" elapsed="0.000230"/>
</kw>
<doc>Destroy all sessions in the requests library and log into karaf.log that the netconf readiness wait is over.</doc>
<status status="PASS" start="2026-08-15T23:50:11.244451" elapsed="0.073557"/>
</kw>
<doc>netconf-connector readiness test suite.

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

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


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

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

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

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


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

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

The other test case then checks whether Netconf can pretty print
data. This sometimes makes problems, most likely due to too
new Robot Requests library with an interface incompatible with
this test suite.</doc>
<status status="FAIL" start="2026-08-15T23:44:06.717022" elapsed="364.601018"/>
</suite>
<status status="FAIL" start="2026-08-15T23:44:06.715828" elapsed="364.603179"/>
</suite>
<suite id="s1-s2" name="Max Devices" source="/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/max_devices.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:50:11.415350" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.145:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7ca0bb58bd50&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${REST_API}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-15T23:50:11.415046" elapsed="0.000500"/>
</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-08-15T23:50:11.415785" elapsed="0.000217"/>
</kw>
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.421172" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:11.416770" elapsed="0.004451"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-15T23:50:11.416541" elapsed="0.004741"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.426229" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-08-15T23:50:11.422374" elapsed="0.003884"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-15T23:50:11.426456" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.426345" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.426321" elapsed="0.000201"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.427049" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:11.426676" elapsed="0.000417"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.427572" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-08-15T23:50:11.427254" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-15T23:50:11.428116" elapsed="0.000280"/>
</kw>
<msg time="2026-08-15T23:50:11.428493" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:11.428540" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.427761" elapsed="0.000802"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.429129" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:50:11.428730" elapsed="0.000425"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.430154" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:50:11.429860" elapsed="0.000324"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.430588" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:50:11.430333" elapsed="0.000281"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.431080" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.430775" elapsed="0.000332"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.434586" elapsed="0.000225"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.435294" level="INFO">${member_ip} = 10.30.170.145</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:50:11.434971" elapsed="0.000349"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.435470" elapsed="0.000228"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.436498" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:50:11.436206" elapsed="0.000318"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-15T23:50:11.436570" elapsed="0.000037"/>
</return>
<msg time="2026-08-15T23:50:11.436729" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-15T23:50:11.435906" elapsed="0.000848"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:50:11.437371" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.145:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7ca0bb44ccd0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-15T23:50:11.436939" elapsed="0.000544"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.437643" elapsed="0.000204"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-08-15T23:50:11.434019" elapsed="0.003888"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:50:11.433824" elapsed="0.004128"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-15T23:50:11.431170" elapsed="0.006814"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.438547" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:11.438149" elapsed="0.000441"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.439167" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.145'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:11.438750" elapsed="0.000460"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.439748" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:11.439368" elapsed="0.000421"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-08-15T23:50:11.429400" elapsed="0.010502"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-08-15T23:50:11.422030" elapsed="0.017928"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.440145" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.440030" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.440011" elapsed="0.000200"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.443387" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:50:11.443001" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.443882" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:50:11.443572" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:50:11.443953" elapsed="0.000029"/>
</return>
<msg time="2026-08-15T23:50:11.444112" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:50:11.442659" elapsed="0.001484"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:50:11.445234" level="INFO">${member_ip} = 10.30.170.145</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.444861" elapsed="0.000400"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.446008" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.450043" elapsed="0.000728"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.451713" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.145" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:11.451060" elapsed="0.000818"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.453164" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.452149" elapsed="0.001065"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.454926" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:50:11.455099" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:50:11.454512" elapsed="0.000629"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.455468" elapsed="0.000468"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.457180" level="INFO">Logging into '10.30.170.145:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:50:11.812795" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:49:52 UTC 2026

  System load:  0.36               Processes:             151
  Usage of /:   7.0% of 154.88GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.145
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

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

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

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


Last login: Sat Aug 15 23:49:52 2026 from 10.30.171.53
[?2004h[jenkins@releng-59795-54-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-08-15T23:50:11.456722" elapsed="0.356353"/>
</kw>
<msg time="2026-08-15T23:50:11.813163" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.456284" elapsed="0.357046"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:50:11.453639" elapsed="0.359848"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.814528" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-15T23:50:11.827275" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-15T23:50:11.827451" level="INFO">${stdout} = </msg>
<msg time="2026-08-15T23:50:11.827552" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:50:11.813984" elapsed="0.013619"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.827938" elapsed="0.000532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.829703" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:11.829092" elapsed="0.000741"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.830293" elapsed="0.000055"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.830016" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.829986" elapsed="0.000480"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-15T23:50:11.830777" elapsed="0.000100"/>
</return>
<status status="PASS" start="2026-08-15T23:50:11.830549" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.830532" elapsed="0.000463"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.831054" 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-08-15T23:50:11.834749" elapsed="0.000493"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.835522" elapsed="0.000317"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.836102" elapsed="0.000219"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:50:11.831546" elapsed="0.004843"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-08-15T23:50:11.448090" elapsed="0.388473"/>
</kw>
<msg time="2026-08-15T23:50:11.836618" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.447457" elapsed="0.389212"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-15T23:50:11.446790" elapsed="0.389958"/>
</kw>
<msg time="2026-08-15T23:50:11.836787" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.446291" elapsed="0.390565"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:11.839554" elapsed="0.000401"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.840118" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.840413" elapsed="0.000094"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:50:11.837142" elapsed="0.003415"/>
</kw>
<msg time="2026-08-15T23:50:11.840647" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-08-15T23:50:11.445475" elapsed="0.395197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.841116" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:11.840870" elapsed="0.000287"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:50:11.841199" elapsed="0.000029"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-08-15T23:50:11.444494" elapsed="0.396828"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:50:11.444320" elapsed="0.397076"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:50:11.444194" elapsed="0.397244"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-08-15T23:50:11.440432" elapsed="0.401069"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-08-15T23:50:11.841682" elapsed="0.000234"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:11.855600" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:11.855488" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.855468" elapsed="0.000201"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.855972" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.855834" elapsed="0.000269"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.856509" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:11.856254" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:11.856958" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:11.856701" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:50:11.857779" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-08-15T23:50:11.857518" elapsed="0.000396">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-15T23:50:11.858021" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-15T23:50:11.858067" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.857156" elapsed="0.000934"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:11.858396" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:11.858164" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:11.858145" elapsed="0.000349"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:50:11.859252" level="INFO">${ip_address} = 10.30.170.145</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.858980" elapsed="0.000298"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-15T23:50:11.859326" elapsed="0.000028"/>
</return>
<msg time="2026-08-15T23:50:11.859474" level="INFO">${odl_ip} = 10.30.170.145</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-15T23:50:11.858694" elapsed="0.000805"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.859656" elapsed="0.000429"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:11.860366" level="INFO">index=4
host=10.30.170.145
alias=None
port=8101
timeout=10 seconds
newline=

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

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

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-08-15T23:50:11.864697" elapsed="0.163475"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.031507" elapsed="0.000371"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:12.032045" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:12.032363" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:50:12.029185" elapsed="0.003331"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:50:12.028551" elapsed="0.004012"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-08-15T23:50:11.855209" elapsed="0.177406"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:50:11.842642" elapsed="0.190020"/>
</kw>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:11.842274" elapsed="0.190439"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:50:11.842133" elapsed="0.190621"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-15T23:50:11.841978" elapsed="0.190857"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-15T23:50:11.421577" elapsed="0.611324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:12.035609" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:12.035489" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.035468" elapsed="0.000212"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:12.040555" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:12.040448" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.040429" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.041581" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:50:12.041193" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.042100" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:50:12.041767" elapsed="0.000359"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:50:12.042171" elapsed="0.000036"/>
</return>
<msg time="2026-08-15T23:50:12.042332" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:50:12.040862" elapsed="0.001495"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:12.115033" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:12.114890" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.114864" elapsed="0.000251"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:12.116491" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:12.116362" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.116343" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:50:12.117077" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:50:12.116708" elapsed="0.000398"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.117496" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:50:12.117265" elapsed="0.000257"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.152625" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:50:12.118231" elapsed="0.034543"/>
</kw>
<msg time="2026-08-15T23:50:12.152973" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:50:12.153030" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:12.117679" elapsed="0.035393"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.195369" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "s "c "a "l "e "/ "m "[78Ca "[A[78Cx
 "_ "d "e "v "i "c "e "s ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:50:12.153839" elapsed="0.041688"/>
</kw>
<msg time="2026-08-15T23:50:12.195654" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:50:12.195700" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:12.153328" elapsed="0.042409"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:12.196282" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:12.195956" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.195793" elapsed="0.000678"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.196986" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "s "c "a "l "e "/ "m "[78Ca "[A[78Cx
 "_ "d "e "v "i "c "e "s ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:12.196616" elapsed="0.000457"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:12.197375" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:12.197139" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.197121" elapsed="0.000426"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:50:12.197581" 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">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.199640" elapsed="0.000494"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:12.200470" elapsed="0.000293"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:12.201109" elapsed="0.000231"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:50:12.198892" elapsed="0.002535"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:50:12.197980" elapsed="0.003581"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:50:12.116072" elapsed="0.085590"/>
</kw>
<msg time="2026-08-15T23:50:12.201754" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:12.201905" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:12.115311" elapsed="0.086636"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:50:12.202134" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-15T23:50:12.202025" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.202006" elapsed="0.000227"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:12.202630" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:12.202971" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:50:12.203042" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:50:12.114422" elapsed="0.088726"/>
</kw>
<msg time="2026-08-15T23:50:12.203243" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:12.203287" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "s "c "a "l "e "- "m "a "x "- "d "e "v "i "c "e "s "- "o "n "l "y "- "v "a "n ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:12.042731" elapsed="0.160594"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:12.203652" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:12.203399" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.203383" elapsed="0.000377"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:50:12.042588" elapsed="0.161199"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:50:12.042413" elapsed="0.161462"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:50:12.040156" elapsed="0.163777"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-15T23:50:12.033498" elapsed="0.170490"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:12.033061" elapsed="0.170969"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-08-15T23:50:11.416230" elapsed="0.787851"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.204869" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-15T23:50:12.204575" elapsed="0.000321"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.209107" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:12.205053" elapsed="0.004102"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-15T23:50:12.213502" level="INFO">Creating Session using : alias=default, url=http://10.30.170.145:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7ca0bb454950&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-15T23:50:12.213118" elapsed="0.000520"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-15T23:50:12.212696" elapsed="0.001010"/>
</kw>
<status status="PASS" start="2026-08-15T23:50:12.209227" elapsed="0.004510"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.209209" elapsed="0.004553"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.218932" level="INFO">${odl_connection} = 7</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:12.218548" elapsed="0.000411"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.220563" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:50:12.220640" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:50:12.220289" elapsed="0.000375"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.220836" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.222010" level="INFO">Logging into '10.30.170.145:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:50:12.562450" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:49:52 UTC 2026

  System load:  0.36               Processes:             151
  Usage of /:   7.0% of 154.88GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.145
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

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

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

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


Last login: Sat Aug 15 23:50:11 2026 from 10.30.171.53
[?2004h[jenkins@releng-59795-54-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-08-15T23:50:12.221680" elapsed="0.340928"/>
</kw>
<msg time="2026-08-15T23:50:12.562693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.221322" elapsed="0.341509"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:50:12.219860" elapsed="0.343098"/>
</kw>
<msg time="2026-08-15T23:50:12.563011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.219463" elapsed="0.343598"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-15T23:50:12.219133" elapsed="0.344005"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-15T23:50:12.563194" elapsed="0.000046"/>
</return>
<msg time="2026-08-15T23:50:12.563413" level="INFO">${odl} = 7</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-15T23:50:12.218256" elapsed="0.345184"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.573438" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-15T23:50:12.582118" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-15T23:50:12.563667" elapsed="0.018615"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:50:12.582516" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-15T23:50:12.583261" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:12.583059" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:12.583027" elapsed="0.000326"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.590363" level="INFO">${tools_connection} = 8</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:50:12.589781" elapsed="0.000621"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:50:12.592859" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:50:12.592972" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:50:12.592433" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.593227" elapsed="0.000460"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:50:12.594966" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:50:13.229096" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:50:12 UTC 2026

  System load:  0.03               Processes:             160
  Usage of /:   5.0% of 154.88GB   Users logged in:       1
  Memory usage: 1%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sat Aug 15 23:44:10 2026 from 10.30.171.53
[?2004h[jenkins@releng-59795-54-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-08-15T23:50:12.594446" elapsed="0.634813"/>
</kw>
<msg time="2026-08-15T23:50:13.229343" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.593946" elapsed="0.635481"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:50:12.591791" elapsed="0.637753"/>
</kw>
<msg time="2026-08-15T23:50:13.229596" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:12.591186" elapsed="0.638466"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-15T23:50:12.590671" elapsed="0.639063"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-15T23:50:13.229790" elapsed="0.000058"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-15T23:50:12.589271" elapsed="0.640711"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-15T23:50:12.214023" elapsed="1.016015"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-15T23:50:12.204320" elapsed="1.025770"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-15T23:50:13.240379" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-15T23:50:13.249238" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../../tools/netconf_tools/getter.py' -&gt; '/home/jenkins//getter.py'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../../tools/netconf_tools/getter.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-15T23:50:13.230309" elapsed="0.019068"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-15T23:50:13.256247" level="INFO">'/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../libraries/AuthStandalone.py' -&gt; '/home/jenkins//AuthStandalone.py'</msg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../libraries/AuthStandalone.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-15T23:50:13.249648" elapsed="0.006684"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.257314" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>${USE_NETCONF_CONNECTOR}==${True}</arg>
<arg>default</arg>
<arg>${device_type}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:50:13.256601" elapsed="0.000751"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.258051" level="INFO">${device_type} = full-uri-device</msg>
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:50:13.257591" elapsed="0.000519"/>
</kw>
<doc>Setup everything needed for the test cases.</doc>
<status status="PASS" start="2026-08-15T23:50:11.414752" elapsed="1.843439"/>
</kw>
<test id="s1-s2-t1" name="Find Max Netconf Devices" line="45">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-15T23:50:13.277082" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-15T23:50:13.276816" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:13.278418" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:13.278288" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.278264" elapsed="0.000227"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:13.283431" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:13.283325" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.283307" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.284531" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:50:13.284146" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.285030" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-15T23:50:13.284717" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-15T23:50:13.285101" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:50:13.285260" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-08-15T23:50:13.283726" elapsed="0.001558"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:13.290872" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:13.290748" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.290729" elapsed="0.000212"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-15T23:50:13.292173" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:50:13.292062" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.292044" elapsed="0.000208"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-15T23:50:13.292709" level="INFO">${karaf_connection_index} = 4</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:50:13.292401" elapsed="0.000335"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:50:13.293133" level="INFO">${current_connection_index} = 8</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:50:13.292911" elapsed="0.000248"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:50:13.327648" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "- "s "c "a "l "e "- "m "a "x "[78C- "[A[78Cd</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:50:13.293650" elapsed="0.034201"/>
</kw>
<msg time="2026-08-15T23:50:13.328104" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-15T23:50:13.328152" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "n "e "t "c "o "n "f "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:13.293317" elapsed="0.034873"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-15T23:50:13.362405" level="INFO">"e "v "i "c "e "s ". "t "x "t ". "M "a "x "[C "D "e "v "i "c "e "s ". "F "i "n "d "[C "M "a "x "[C "N "e "t "c "o "n "f "[C "D "e "v "i "c "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-15T23:50:13.328875" elapsed="0.033773"/>
</kw>
<msg time="2026-08-15T23:50:13.363055" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-15T23:50:13.363160" level="INFO">${message_wait} =  "e "v "i "c "e "s ". "t "x "t ". "M "a "x "[C "D "e "v "i "c "e "s ". "F "i "n "d "[C "M "a "x "[C "N "e "t "c "o "n "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-08-15T23:50:13.328428" elapsed="0.034814"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.364054" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:13.363439" elapsed="0.000745"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.363387" elapsed="0.000857"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.365288" level="INFO"> "e "v "i "c "e "s ". "t "x "t ". "M "a "x "[C "D "e "v "i "c "e "s ". "F "i "n "d "[C "M "a "x "[C "N "e "t "c "o "n "f "[C "D "e "v "i "c "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:50:13.364564" elapsed="0.000882"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.366123" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:13.365597" elapsed="0.000763"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.365558" elapsed="0.000859"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-15T23:50:13.366495" elapsed="0.000073"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:50:13.370278" elapsed="0.000158"/>
</kw>
<msg time="2026-08-15T23:50:13.370498" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:50:13.369132" elapsed="0.001503"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.370937" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.371275" 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-08-15T23:50:13.368458" elapsed="0.003005"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-08-15T23:50:13.367156" elapsed="0.004374"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-08-15T23:50:13.291687" elapsed="0.079942"/>
</kw>
<msg time="2026-08-15T23:50:13.371724" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:13.371770" level="INFO">${message} =  "e "v "i "c "e "s ". "t "x "t ". "M "a "x "[C "D "e "v "i "c "e "s ". "F "i "n "d "[C "M "a "x "[C "N "e "t "c "o "n "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-08-15T23:50:13.291093" elapsed="0.080744"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-15T23:50:13.372062" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-15T23:50:13.371920" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.371900" elapsed="0.000250"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.372560" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.372929" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-15T23:50:13.373003" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-15T23:50:13.290411" elapsed="0.082703"/>
</kw>
<msg time="2026-08-15T23:50:13.373211" level="INFO">${status} = PASS</msg>
<msg time="2026-08-15T23:50:13.373257" level="INFO">${output} =  "e "v "i "c "e "s ". "t "x "t ". "M "a "x "[C "D "e "v "i "c "e "s ". "F "i "n "d "[C "M "a "x "[C "N "e "t "c "o "n "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-08-15T23:50:13.285668" elapsed="0.087629"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:50:13.373634" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:50:13.373378" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.373358" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-15T23:50:13.285525" elapsed="0.088212"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-15T23:50:13.285344" elapsed="0.088426"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-08-15T23:50:13.282969" elapsed="0.090947"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-08-15T23:50:13.277981" elapsed="0.095997"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:50:13.277513" elapsed="0.096514"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-08-15T23:50:13.274538" elapsed="0.099544"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.374527" level="INFO">${error_message} = Failure initializing suite</msg>
<var>${error_message}</var>
<arg>Failure initializing suite</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:50:13.374252" elapsed="0.000301"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.376936" level="INFO">${maximum_devices} = 0</msg>
<var>${maximum_devices}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:50:13.374710" elapsed="0.002254"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.377383" level="INFO">${discover_time} = 0</msg>
<var>${discover_time}</var>
<arg>0</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:50:13.377123" elapsed="0.000287"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.377893" level="INFO">${start} = 1000</msg>
<var>${start}</var>
<arg>${INIT_DEVICE_COUNT}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-15T23:50:13.377568" elapsed="0.000385"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.378416" level="INFO">${stop} = 3000</msg>
<var>${stop}</var>
<arg>${MAX_DEVICE_COUNT}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-15T23:50:13.378109" elapsed="0.000333"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-08-15T23:50:13.378910" level="INFO">${increment} = 500</msg>
<var>${increment}</var>
<arg>${DEVICE_INCREMENT}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-15T23:50:13.378593" elapsed="0.000342"/>
</kw>
<if>
<branch type="IF" condition="&quot;${SCHEMA_MODEL}&quot; == &quot;juniper&quot;">
<kw name="Get Juniper Device Schemas">
<kw name="Run" owner="OperatingSystem">
<msg time="2026-08-15T23:50:13.380331" level="INFO">Running command 'git clone https://github.com/Juniper/yang.git 2&gt;&amp;1'.</msg>
<arg>git clone https://github.com/Juniper/yang.git</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-08-15T23:50:13.379503" elapsed="272.010520"/>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-08-15T23:54:45.391924" level="INFO">Running command 'mkdir /tmp/junos_19.4R1 2&gt;&amp;1'.</msg>
<arg>mkdir /tmp/junos_19.4R1</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-08-15T23:54:45.390424" elapsed="0.009694"/>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-08-15T23:54:45.401002" level="INFO">Running command 'find yang/19.4/19.4R1/junos -type f -name '*yang' -exec cp {} /tmp/junos_19.4R1/ \; 2&gt;&amp;1'.</msg>
<arg>find yang/19.4/19.4R1/junos -type f -name '*yang' -exec cp {} /tmp/junos_19.4R1/ \\;</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-08-15T23:54:45.400404" elapsed="0.870986"/>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-08-15T23:54:46.272514" level="INFO">Running command 'cp yang/19.4/19.4R1/common/* /tmp/junos_19.4R1/ 2&gt;&amp;1'.</msg>
<arg>cp yang/19.4/19.4R1/common/* /tmp/junos_19.4R1/</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-08-15T23:54:46.271716" elapsed="0.003822"/>
</kw>
<kw name="List Directory" owner="OperatingSystem">
<msg time="2026-08-15T23:54:46.275855" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/junos_19.4R1"&gt;/tmp/junos_19.4R1&lt;/a&gt;'.</msg>
<msg time="2026-08-15T23:54:46.276229" level="INFO">183 items:
junos-common-ddl-extensions@2019-01-01.yang
junos-common-odl-extensions@2019-01-01.yang
junos-common-types@2019-01-01.yang
junos-conf-access-profile@2019-01-01.yang
junos-conf-access@2019-01-01.yang
junos-conf-accounting-options@2019-01-01.yang
junos-conf-applications@2019-01-01.yang
junos-conf-bridge-domains@2019-01-01.yang
junos-conf-chassis@2019-01-01.yang
junos-conf-class-of-service@2019-01-01.yang
junos-conf-diameter@2019-01-01.yang
junos-conf-dynamic-profiles@2019-01-01.yang
junos-conf-event-options@2019-01-01.yang
junos-conf-fabric@2019-01-01.yang
junos-conf-firewall@2019-01-01.yang
junos-conf-forwarding-options@2019-01-01.yang
junos-conf-interfaces@2019-01-01.yang
junos-conf-logical-systems@2019-01-01.yang
junos-conf-multi-chassis@2019-01-01.yang
junos-conf-multicast-snooping-options@2019-01-01.yang
junos-conf-poe@2019-01-01.yang
junos-conf-policy-options@2019-01-01.yang
junos-conf-protocols@2019-01-01.yang
junos-conf-root@2019-01-01.yang
junos-conf-routing-instances@2019-01-01.yang
junos-conf-routing-options@2019-01-01.yang
junos-conf-security@2019-01-01.yang
junos-conf-services@2019-01-01.yang
junos-conf-snmp@2019-01-01.yang
junos-conf-switch-options@2019-01-01.yang
junos-conf-system@2019-01-01.yang
junos-conf-unified-edge@2019-01-01.yang
junos-conf-virtual-chassis@2019-01-01.yang
junos-conf-vlans@2019-01-01.yang
junos-conf-vmhost@2019-01-01.yang
junos-rpc-access-cac@2019-01-01.yang
junos-rpc-access-security@2019-01-01.yang
junos-rpc-accounting@2019-01-01.yang
junos-rpc-agent@2019-01-01.yang
junos-rpc-amt@2019-01-01.yang
junos-rpc-analytics@2019-01-01.yang
junos-rpc-ancp@2019-01-01.yang
junos-rpc-app-engine@2019-01-01.yang
junos-rpc-aps@2019-01-01.yang
junos-rpc-arp@2019-01-01.yang
junos-rpc-as-path@2019-01-01.yang
junos-rpc-authentication-whitelist@2019-01-01.yang
junos-rpc-auto-bandwidth@2019-01-01.yang
junos-rpc-auto-configuration@2019-01-01.yang
junos-rpc-backup-selection@2019-01-01.yang
junos-rpc-bfd@2019-01-01.yang
junos-rpc-bgp@2019-01-01.yang
junos-rpc-bridge@2019-01-01.yang
junos-rpc-captive-portal@2019-01-01.yang
junos-rpc-chassis@2019-01-01.yang
junos-rpc-class-of-service@2019-01-01.yang
junos-rpc-clear@2019-01-01.yang
junos-rpc-cli@2019-01-01.yang
junos-rpc-connections@2019-01-01.yang
junos-rpc-database-replication@2019-01-01.yang
junos-rpc-ddos-protection@2019-01-01.yang
junos-rpc-dhcp-security@2019-01-01.yang
junos-rpc-dhcp@2019-01-01.yang
junos-rpc-dhcpv6@2019-01-01.yang
junos-rpc-diameter@2019-01-01.yang
junos-rpc-dot1x@2019-01-01.yang
junos-rpc-dvmrp@2019-01-01.yang
junos-rpc-dynamic-profile@2019-01-01.yang
junos-rpc-dynamic-tunnels@2019-01-01.yang
junos-rpc-ephemeral-configuration@2019-01-01.yang
junos-rpc-esis@2019-01-01.yang
junos-rpc-ethernet-switching@2019-01-01.yang
junos-rpc-event-options@2019-01-01.yang
junos-rpc-event-viewer@2019-01-01.yang
junos-rpc-evpn@2019-01-01.yang
junos-rpc-extensible-subscriber-services@2019-01-01.yang
junos-rpc-extension-provider@2019-01-01.yang
junos-rpc-extension-service@2019-01-01.yang
junos-rpc-file-mgd@2019-01-01.yang
junos-rpc-file@2019-01-01.yang
junos-rpc-firewall@2019-01-01.yang
junos-rpc-flexible-tunnels@2019-01-01.yang
junos-rpc-flight-recorder@2019-01-01.yang
junos-rpc-forwarding-options@2019-01-01.yang
junos-rpc-help@2019-01-01.yang
junos-rpc-helper@2019-01-01.yang
junos-rpc-hfrr@2019-01-01.yang
junos-rpc-host@2019-01-01.yang
junos-rpc-iccp@2019-01-01.yang
junos-rpc-igmp@2019-01-01.yang
junos-rpc-ilmi@2019-01-01.yang
junos-rpc-ingress-replication@2019-01-01.yang
junos-rpc-interfaces@2019-01-01.yang
junos-rpc-ipv6@2019-01-01.yang
junos-rpc-isis@2019-01-01.yang
junos-rpc-jdaf@2019-01-01.yang
junos-rpc-l2-learning@2019-01-01.yang
junos-rpc-l2circuit@2019-01-01.yang
junos-rpc-l2cpd@2019-01-01.yang
junos-rpc-l2vpn@2019-01-01.yang
junos-rpc-lacp@2019-01-01.yang
junos-rpc-ldp@2019-01-01.yang
junos-rpc-link-management@2019-01-01.yang
junos-rpc-lldp@2019-01-01.yang
junos-rpc-load@2019-01-01.yang
junos-rpc-log@2019-01-01.yang
junos-rpc-loop-detect@2019-01-01.yang
junos-rpc-mac-refresh@2019-01-01.yang
junos-rpc-mac-rewrite@2019-01-01.yang
junos-rpc-mld@2019-01-01.yang
junos-rpc-monitor@2019-01-01.yang
junos-rpc-mpls@2019-01-01.yang
junos-rpc-msdp@2019-01-01.yang
junos-rpc-mtrace@2019-01-01.yang
junos-rpc-multi-chassis@2019-01-01.yang
junos-rpc-multicast@2019-01-01.yang
junos-rpc-mvpn@2019-01-01.yang
junos-rpc-mvrp@2019-01-01.yang
junos-rpc-network-access@2019-01-01.yang
junos-rpc-network-agent@2019-01-01.yang
junos-rpc-nonstop-routing@2019-01-01.yang
junos-rpc-ntp@2019-01-01.yang
junos-rpc-oam@2019-01-01.yang
junos-rpc-op@2019-01-01.yang
junos-rpc-ospf3@2019-01-01.yang
junos-rpc-ospf@2019-01-01.yang
junos-rpc-ovsdb@2019-01-01.yang
junos-rpc-passive-monitoring@2019-01-01.yang
junos-rpc-path-computation-client@2019-01-01.yang
junos-rpc-performance-monitoring@2019-01-01.yang
junos-rpc-pfe@2019-01-01.yang
junos-rpc-pgm@2019-01-01.yang
junos-rpc-pim@2019-01-01.yang
junos-rpc-ping@2019-01-01.yang
junos-rpc-poe@2019-01-01.yang
junos-rpc-policer@2019-01-01.yang
junos-rpc-ppp@2019-01-01.yang
junos-rpc-pppoe@2019-01-01.yang
junos-rpc-programmable-rpd@2019-01-01.yang
junos-rpc-protection-group@2019-01-01.yang
junos-rpc-ptp@2019-01-01.yang
junos-rpc-quit@2019-01-01.yang
junos-rpc-r2cp@2019-01-01.yang
junos-rpc-redundant-trunk-group@2019-01-01.yang
junos-rpc-remote-device-management@2019-01-01.yang
junos-rpc-request@2019-01-01.yang
junos-rpc-restart@2019-01-01.yang
junos-rpc-rip@2019-01-01.yang
junos-rpc-ripng@2019-01-01.yang
junos-rpc-rollback-config@2019-01-01.yang
junos-rpc-route@2019-01-01.yang
junos-rpc-rsvp@2019-01-01.yang
junos-rpc-sap@2019-01-01.yang
junos-rpc-save@2019-01-01.yang
junos-rpc-security@2019-01-01.yang
junos-rpc-services@2019-01-01.yang
junos-rpc-set@2019-01-01.yang
junos-rpc-sflow@2019-01-01.yang
junos-rpc-shmlog@2019-01-01.yang
junos-rpc-snmp@2019-01-01.yang
junos-rpc-spanning-tree@2019-01-01.yang
junos-rpc-spring-traffic-engineering@2019-01-01.yang
junos-rpc-ssl-certificates@2019-01-01.yang
junos-rpc-static-subscribers@2019-01-01.yang
junos-rpc-subscribers@2019-01-01.yang
junos-rpc-synchronous-ethernet@2019-01-01.yang
junos-rpc-syslog-filenames@2019-01-01.yang
junos-rpc-system@2019-01-01.yang
junos-rpc-task@2019-01-01.yang
junos-rpc-tcp-forwarding@2019-01-01.yang
junos-rpc-ted@2019-01-01.yang
junos-rpc-test@2019-01-01.yang
junos-rpc-trace@2019-01-01.yang
junos-rpc-traceroute@2019-01-01.yang
junos-rpc-unified-edge@2019-01-01.yang
junos-rpc-v4ov6-tunnels@2019-01-01.yang
junos-rpc-validation@2019-01-01.yang
junos-rpc-version@2019-01-01.yang
junos-rpc-virtual-chassis@2019-01-01.yang
junos-rpc-vlans@2019-01-01.yang
junos-rpc-vmhost@2019-01-01.yang
junos-rpc-vpls@2019-01-01.yang
junos-rpc-vrrp@2019-01-01.yang</msg>
<arg>/tmp/junos_19.4R1/</arg>
<doc>Returns and logs items in a directory, optionally filtered with ``pattern``.</doc>
<status status="PASS" start="2026-08-15T23:54:46.275710" elapsed="0.001125"/>
</kw>
<return>
<value>/tmp/junos_19.4R1</value>
<status status="PASS" start="2026-08-15T23:54:46.276914" elapsed="0.000065"/>
</return>
<msg time="2026-08-15T23:54:46.277190" level="INFO">${schema_dir} = /tmp/junos_19.4R1</msg>
<var>${schema_dir}</var>
<status status="PASS" start="2026-08-15T23:50:13.379237" elapsed="272.897990"/>
</kw>
<status status="PASS" start="2026-08-15T23:50:13.379004" elapsed="272.898268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${schema_dir}</var>
<arg>none</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:46.277621" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:54:46.277317" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-15T23:50:13.378986" elapsed="272.898746"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.278622" level="INFO">${INSTALL_TESTTOOL} = True</msg>
<var>${INSTALL_TESTTOOL}</var>
<arg>'${IS_KARAF_APPL}' == 'False'</arg>
<arg>False</arg>
<arg>True</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.278012" elapsed="0.000650"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.282240" level="INFO">${TESTTOOL_EXECUTABLE} = </msg>
<var>${TESTTOOL_EXECUTABLE}</var>
<arg>'${IS_KARAF_APPL}' == 'False'</arg>
<arg>${NETCONF_FILENAME}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.279011" elapsed="0.003268"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.283107" level="INFO">${SCHEMAS} = /tmp/junos_19.4R1</msg>
<var>${SCHEMAS}</var>
<arg>'${IS_KARAF_APPL}' == 'False'</arg>
<arg>/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/suites/netconf/scale/../../../variables/netconf/CRUD/schemas</arg>
<arg>${schema_dir}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.282549" elapsed="0.000597"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.283869" level="INFO">${restconf_url} = http://10.30.170.145:8181/rests</msg>
<var>${restconf_url}</var>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}/rests</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:46.283377" elapsed="0.000566"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.284530" level="INFO">${device_names} = []</msg>
<var>${device_names}</var>
<arg>[]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:46.284169" elapsed="0.000397"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.287681" level="INFO">${timeout} = 3000</msg>
<var>${timeout}</var>
<arg>${devices}*${TIMEOUT_FACTOR}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:46.287315" elapsed="0.000394"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.288322" level="INFO">${timeout} = 3000</msg>
<var>${timeout}</var>
<arg>${timeout} &gt; ${MIN_CONNECT_TIMEOUT}</arg>
<arg>${timeout}</arg>
<arg>${MIN_CONNECT_TIMEOUT}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.287921" elapsed="0.000429"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Starting Iteration with ${devices} devices</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-08-15T23:54:46.288532" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="&quot;${INSTALL_TESTTOOL}&quot;==&quot;True&quot;">
<kw name="Install_And_Start_Testtool" owner="NetconfKeywords">
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.310266" level="INFO">${name_prefix} = netconf-testtool-</msg>
<var>${name_prefix}</var>
<arg>${artifact}-</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:46.309964" elapsed="0.000330"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.310809" level="INFO">${extension} = jar</msg>
<var>${extension}</var>
<arg>'${component}'=='odl-micro'</arg>
<arg>tar</arg>
<arg>jar</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.310457" elapsed="0.000382"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.311409" level="INFO">${name_suffix} = -executable.jar</msg>
<var>${name_suffix}</var>
<arg>"${suffix}" != ""</arg>
<arg>-${suffix}.${extension}</arg>
<arg>.${extension}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.311007" elapsed="0.000430"/>
</kw>
<kw name="Deploy_Artifact" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_url}""" != ""</arg>
<arg>Deploy_From_Url</arg>
<arg>${explicit_url}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.312692" elapsed="0.000329"/>
</kw>
<kw name="Fetch From Left" owner="String">
<msg time="2026-08-15T23:54:46.313390" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${BUNDLE_URL}</arg>
<arg>/org/opendaylight</arg>
<doc>Returns contents of the ``string`` before the first occurrence of ``marker``.</doc>
<status status="PASS" start="2026-08-15T23:54:46.313182" elapsed="0.000235"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.313984" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>'${urlbase}' != '${BUNDLE_URL}'</arg>
<arg>${urlbase}</arg>
<arg>${fallback_url}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:46.313579" elapsed="0.000432"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Magnesium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.333147" elapsed="0.000404"/>
</kw>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'carpeople'] {} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:54:46.332674" elapsed="0.000948"/>
</kw>
<msg time="2026-08-15T23:54:46.333668" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.323906" elapsed="0.009818"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>carpeople</arg>
<doc>Compare magnesium to vanadium and in case vanadium is at most magnesium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:54:46.323489" elapsed="0.010328"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Aluminium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.352773" elapsed="0.000418"/>
</kw>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'netconf'] {} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:54:46.352315" elapsed="0.000946"/>
</kw>
<msg time="2026-08-15T23:54:46.353307" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.343411" elapsed="0.009946"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<doc>Compare aluminium to vanadium and in case vanadium is at most aluminium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:54:46.343024" elapsed="0.010407"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Silicon" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.372262" elapsed="0.000406"/>
</kw>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'bgpcep'] {} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:54:46.371752" elapsed="0.000985"/>
</kw>
<msg time="2026-08-15T23:54:46.372781" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.363083" elapsed="0.009765"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>bgpcep</arg>
<doc>Compare silicon to vanadium and in case vanadium is at most silicon,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-15T23:54:46.362677" elapsed="0.010248"/>
</kw>
<if>
<branch type="IF" condition="'${build_version}'=='${EMPTY}'">
<kw name="NexusKeywords__Detect_Version_To_Pull" owner="NexusKeywords">
<kw name="NexusKeywords__Get_Items_To_Look_At" owner="NexusKeywords">
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<arg>Component not supported by NexusKeywords version detection: ${component}</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="PASS" start="2026-08-15T23:54:46.375982" elapsed="0.000250"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-15T23:54:46.376739" elapsed="0.000195"/>
</kw>
<msg time="2026-08-15T23:54:46.376981" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Collections.Get_From_Dictionary</arg>
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.376395" elapsed="0.000636"/>
</kw>
<msg time="2026-08-15T23:54:46.377132" level="INFO">${itemlist} = netconf-api</msg>
<var>${itemlist}</var>
<arg>${component}</arg>
<doc>Get a list of items that might contain the version number that we are looking for.</doc>
<status status="PASS" start="2026-08-15T23:54:46.375611" elapsed="0.001545"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:54:46.377455" level="INFO">index=8
host=10.30.171.185
alias=None
port=22
timeout=10 seconds
newline=

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

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-15T23:54:46.377320" elapsed="0.000263"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-15T23:54:46.382534" level="INFO">${odl_connection} = 9</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-15T23:54:46.382138" elapsed="0.000423"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:54:46.384996" level="INFO">Length is 0.</msg>
<msg time="2026-08-15T23:54:46.385135" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:54:46.384160" elapsed="0.001033"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.385493" elapsed="0.000725"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-15T23:54:46.388894" level="INFO">Logging into '10.30.170.145:22' as 'jenkins'.</msg>
<msg time="2026-08-15T23:54:47.004467" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sat Aug 15 23:54:46 UTC 2026

  System load:  0.09               Processes:             155
  Usage of /:   7.0% of 154.88GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.145
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

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

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

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


Last login: Sat Aug 15 23:50:12 2026 from 10.30.171.53
[?2004h[jenkins@releng-59795-54-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-08-15T23:54:46.388178" elapsed="0.616513"/>
</kw>
<msg time="2026-08-15T23:54:47.004772" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.386641" elapsed="0.618235"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-08-15T23:54:46.383511" elapsed="0.621718"/>
</kw>
<msg time="2026-08-15T23:54:47.005282" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:46.383129" elapsed="0.622201"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-15T23:54:46.382737" elapsed="0.622668"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-15T23:54:47.005452" elapsed="0.000038"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-15T23:54:46.381780" elapsed="0.623821"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:47.006061" level="INFO">Executing command 'sh search.sh /tmp/karaf-0.23.2-SNAPSHOT/system netconf-api'.</msg>
<msg time="2026-08-15T23:54:47.048944" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:47.049189" level="INFO">${version} = 10.0.3
org/opendaylight/netconf</msg>
<msg time="2026-08-15T23:54:47.049289" level="INFO">${result} = 0</msg>
<var>${version}</var>
<var>${result}</var>
<arg>sh search.sh ${WORKSPACE}/${BUNDLEFOLDER}/system ${itemlist}</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:47.005783" elapsed="0.043559"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-15T23:54:47.049707" elapsed="0.000517"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-15T23:54:47.057261" elapsed="0.000203"/>
</kw>
<msg time="2026-08-15T23:54:47.057524" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:47.056251" elapsed="0.001345"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.057833" elapsed="0.000033"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.058062" elapsed="0.000029"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-15T23:54:47.050775" elapsed="0.007400"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.058728" level="INFO">10.0.3
org/opendaylight/netconf</msg>
<arg>${version}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.058378" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="${result}!=0">
<kw name="Fail" owner="BuiltIn">
<arg>Component "${component}": searching for "${itemlist}" found no version, cannot locate test tool.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.059223" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:54:47.058917" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.058887" elapsed="0.000447"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-08-15T23:54:47.059900" level="INFO">${version} = 10.0.3</msg>
<msg time="2026-08-15T23:54:47.059964" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${version}</arg>
<arg>max_split=1</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-08-15T23:54:47.059552" elapsed="0.000444"/>
</kw>
<return>
<value>${version}</value>
<value>${location}</value>
<status status="PASS" start="2026-08-15T23:54:47.060065" elapsed="0.000042"/>
</return>
<msg time="2026-08-15T23:54:47.060331" level="INFO">${version} = 10.0.3</msg>
<msg time="2026-08-15T23:54:47.060391" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${component}</arg>
<doc>Determine the exact Nexus directory to be used as a source for a particular test tool
Figure out what version of the tool needs to be pulled out of the
Nexus by looking at the version directory of the subsystem from
which the tool is being pulled. This code is REALLY UGLY but there
is no way around it until the bug
https://bugs.opendaylight.org/show_bug.cgi?id=5206 gets fixed.
I also don't want to depend on maven-metadata-local.xml and other
bits and pieces of ODL distribution which are not required for ODL
to function properly.</doc>
<status status="PASS" start="2026-08-15T23:54:46.375183" elapsed="0.685240"/>
</kw>
<status status="PASS" start="2026-08-15T23:54:46.372998" elapsed="0.687481"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${version}</var>
<var>${location}</var>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.060720" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:54:47.060514" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:46.372978" elapsed="0.687878"/>
</if>
<if>
<branch type="IF" condition="'SNAPSHOT' in '${version}'">
<kw name="Remove Values From List" owner="Collections">
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<arg>bgpcep</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.061231" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:54:47.060934" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.060912" elapsed="0.000433"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.062092" level="INFO">${is_staged} = "FALSE"</msg>
<var>${is_staged}</var>
<arg>"opendaylight.release" not in '${urlbase}' and "opendaylight.snapshot" not in '${urlbase}'</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:47.061548" elapsed="0.000581"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.062916" level="INFO">${is_mri_component} = "TRUE"</msg>
<var>${is_mri_component}</var>
<arg>'${component}' in ${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:47.062358" elapsed="0.000595"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.063845" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.release</msg>
<var>${urlbase}</var>
<arg>${is_mri_component} == "TRUE" and ${is_staged} == "FALSE"</arg>
<arg>${NEXUS_RELEASE_BASE_URL}</arg>
<arg>${urlbase}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:47.063237" elapsed="0.000648"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.064614" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/netconf/netconf-testtool/10.0.3</msg>
<var>${url}</var>
<arg>${urlbase}/${location}/${artifact}/${version}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:47.064104" elapsed="0.000548"/>
</kw>
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:47.067350" level="INFO">Executing command 'curl -L https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml'.</msg>
<msg time="2026-08-15T23:54:47.153103" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:47.153337" level="INFO">${stdout} = &lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.re...</msg>
<msg time="2026-08-15T23:54:47.153389" level="INFO">${stderr} =   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0   ...</msg>
<msg time="2026-08-15T23:54:47.153434" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:47.067094" elapsed="0.086367"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.154543" level="INFO">Length is 316.</msg>
<msg time="2026-08-15T23:54:47.154651" level="FAIL">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  1083    0  1083    0     0  18640      0 --:--:-- --:--:-- --:--:-- 19000' should be empty.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-08-15T23:54:47.154234" elapsed="0.000498">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  1083    0  1083    0     0  18640      0 --:--:-- --:--:-- --:--:-- 19000' should be empty.</status>
</kw>
<msg time="2026-08-15T23:54:47.154858" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-08-15T23:54:47.154904" level="INFO">${result} = '  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0  ...</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:47.153759" elapsed="0.001169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.155584" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:47.155107" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.156964" level="INFO">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;

    &lt;link rel="icon" type="image/png" href="https://nexus.opendaylight.org/favicon.png"&gt;
    &lt;!--[if IE]&gt;
    &lt;link rel="SHORTCUT ICON" href="https://nexus.opendaylight.org/favicon.ico"/&gt;
    &lt;![endif]--&gt;

    &lt;link rel="stylesheet" href="https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/h1&gt;
    &lt;p&gt;Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.156579" elapsed="0.000458"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.157517" level="INFO">  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  1083    0  1083    0     0  18640      0 --:--:-- --:--:-- --:--:-- 19000</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.157196" elapsed="0.000369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.158050" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.157715" elapsed="0.000384"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-15T23:54:47.156132" elapsed="0.002026"/>
</kw>
<status status="PASS" start="2026-08-15T23:54:47.155712" elapsed="0.002482"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.155682" elapsed="0.002540"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-15T23:54:47.158386" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:47.158279" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.158262" elapsed="0.000196"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-15T23:54:47.158600" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-08-15T23:54:47.158510" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.158495" elapsed="0.000192"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.159009" elapsed="0.000024"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-15T23:54:47.066250" elapsed="0.092885"/>
</kw>
<msg time="2026-08-15T23:54:47.159197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:47.065496" elapsed="0.093751"/>
</kw>
<msg time="2026-08-15T23:54:47.159402" level="INFO">${metadata} = &lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.re...</msg>
<var>${metadata}</var>
<arg>curl -L ${url}/maven-metadata.xml</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-15T23:54:47.064951" elapsed="0.094480"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:47.162630" level="INFO">Executing command 'echo "&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;

    &lt;link rel="icon" type="image/png" href="https://nexus.opendaylight.org/favicon.png"&gt;
    &lt;!--[if IE]&gt;
    &lt;link rel="SHORTCUT ICON" href="https://nexus.opendaylight.org/favicon.ico"/&gt;
    &lt;![endif]--&gt;

    &lt;link rel="stylesheet" href="https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/h1&gt;
    &lt;p&gt;Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1'.</msg>
<msg time="2026-08-15T23:54:47.209063" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:47.209311" level="INFO">${stdout} = &lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.re...</msg>
<msg time="2026-08-15T23:54:47.209417" level="INFO">${stderr} = bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text...</msg>
<msg time="2026-08-15T23:54:47.209513" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:47.162371" elapsed="0.047193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.211854" level="INFO">Length is 253.</msg>
<msg time="2026-08-15T23:54:47.212076" level="FAIL">'bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory' should be empty.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-08-15T23:54:47.210741" elapsed="0.001481">'bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory' should be empty.</status>
</kw>
<msg time="2026-08-15T23:54:47.212456" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-08-15T23:54:47.212552" level="INFO">${result} = 'bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=tex...</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:47.209995" elapsed="0.002612"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.214203" 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-08-15T23:54:47.213013" elapsed="0.001277"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.217296" level="INFO">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;404 - Path /org/opendaylight/netconf/netconf-testtool/10.0.3/maven-metadata.xml not found in local storage of repository &amp;quot;opendaylight.release&amp;quot; [id=opendaylight.release]&lt;/title&gt;
    &lt;meta http-equiv=Content-Type content=text/html</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.216571" elapsed="0.000862"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.218447" level="INFO">bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.217753" elapsed="0.000826"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.219911" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.218939" elapsed="0.001104"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-15T23:54:47.215307" elapsed="0.004969"/>
</kw>
<status status="PASS" start="2026-08-15T23:54:47.214485" elapsed="0.005846"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.214439" elapsed="0.005930"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-15T23:54:47.220594" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:47.220450" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.220425" elapsed="0.000262"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-08-15T23:54:47.220949" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:47.220759" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.220738" elapsed="0.000320"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.221755" level="FAIL">Got rc: 0 or stderr was not empty: bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory</msg>
<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="FAIL" start="2026-08-15T23:54:47.221257" elapsed="0.000629">Got rc: 0 or stderr was not empty: bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory</status>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-08-15T23:54:47.161502" elapsed="0.060561">Got rc: 0 or stderr was not empty: bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory</status>
</kw>
<msg time="2026-08-15T23:54:47.222147" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-08-15T23:54:47.160732" elapsed="0.061485"/>
</kw>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="FAIL" start="2026-08-15T23:54:47.160057" elapsed="0.062304">Got rc: 0 or stderr was not empty: bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonatype-content.css?2.14.20-02 type=text/css media=screen title=no: No such file or directory</status>
</kw>
<msg time="2026-08-15T23:54:47.222513" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-15T23:54:47.222576" level="INFO">${namepart} = Got rc: 0 or stderr was not empty: bash: line 8: ICON href=https://nexus.opendaylight.org/favicon.ico/&gt;
    &lt;![endif]--&gt;

    &lt;link rel=stylesheet href=https://nexus.opendaylight.org/static/css/Sonaty...</msg>
<var>${status}</var>
<var>${namepart}</var>
<arg>SSHKeywords.Execute_Command_Should_Pass</arg>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:47.159643" elapsed="0.062968"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.223319" level="INFO">Length is 288.</msg>
<msg time="2026-08-15T23:54:47.223425" level="INFO">${length} = 288</msg>
<var>${length}</var>
<arg>${namepart}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-15T23:54:47.222944" elapsed="0.000534"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.224302" level="INFO">${namepart} = 10.0.3</msg>
<var>${namepart}</var>
<arg>"${status}" != "PASS" or ${length} == 0</arg>
<arg>${version}</arg>
<arg>${namepart}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:47.223713" elapsed="0.000628"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.225092" level="INFO">${filename} = netconf-testtool-10.0.3-executable.jar</msg>
<var>${filename}</var>
<arg>${name_prefix}${namepart}${name_suffix}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:47.224567" elapsed="0.000564"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.225686" level="INFO">netconf-testtool-10.0.3-executable.jar</msg>
<arg>${filename}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.225346" elapsed="0.000401"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.226419" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/netconf/netconf-testtool/10.0.3/netconf-testtool-10.0.3-executable.jar</msg>
<var>${url}</var>
<arg>${url}/${filename}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:47.225982" elapsed="0.000476"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:47.226935" level="INFO">Executing command 'wget -q -N 'https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/netconf/netconf-testtool/10.0.3/netconf-testtool-10.0.3-executable.jar' 2&gt;&amp;1'.</msg>
<msg time="2026-08-15T23:54:47.534484" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:47.534783" level="INFO">${response} = </msg>
<msg time="2026-08-15T23:54:47.534942" level="INFO">${result} = 0</msg>
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:47.226679" elapsed="0.308320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.536187" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.535471" elapsed="0.000815"/>
</kw>
<if>
<branch type="IF" condition="${result} == 0">
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-15T23:54:47.536788" elapsed="0.000116"/>
</return>
<status status="PASS" start="2026-08-15T23:54:47.536480" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.536415" elapsed="0.000656"/>
</if>
<kw name="Replace String Using Regexp" owner="String">
<var>${release_url}</var>
<arg>${url}</arg>
<arg>autorelease-[0-9]{4}</arg>
<arg>opendaylight.release</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.537566" elapsed="0.000057"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${release_url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.538057" elapsed="0.000052"/>
</kw>
<if>
<branch type="IF" condition="${result} != 0">
<kw name="Fail" owner="BuiltIn">
<arg>Artifact "${artifact}" in component "${component}" could not be downloaded from ${release_url} nor ${url}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:47.538588" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:54:47.538273" elapsed="0.000431"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:54:47.538235" elapsed="0.000523"/>
</if>
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-08-15T23:54:47.538878" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:54:47.539211" level="INFO">${filename} = netconf-testtool-10.0.3-executable.jar</msg>
<var>${filename}</var>
<arg>${component}</arg>
<arg>${artifact}</arg>
<arg>${name_prefix}</arg>
<arg>${name_suffix}</arg>
<arg>${fallback_url}</arg>
<arg>${explicit_url}</arg>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Deploy the specified artifact from Nexus to the cwd of the machine to which the active SSHLibrary connection points.
netconf is a name part of an artifact present in system/ of ODl installation with the same version as netconf-testtool should have.
Must have https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/karaf/0.23.2-SNAPSHOT/karaf-0.23.2-20260815.223649-264.zip variable set to the URL from which the
tested ODL distribution was downloaded and this place must be
inside a repository created by a standard distribution
construction job. If this is detected to ne be the case, fallback URL is used.
If  is non-empty, Deploy_From_Utrl is called instead.
TODO: Allow deploying to a specific directory, we have SSHKeywords.Execute_Command_At_Cwd_Should_Pass now.</doc>
<status status="PASS" start="2026-08-15T23:54:46.312040" elapsed="1.227228"/>
</kw>
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-15T23:54:47.539445" elapsed="0.000061"/>
</return>
<msg time="2026-08-15T23:54:47.539780" level="INFO">${filename} = netconf-testtool-10.0.3-executable.jar</msg>
<var>${filename}</var>
<arg>netconf</arg>
<arg>netconf-testtool</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="PASS" start="2026-08-15T23:54:46.304016" elapsed="1.235850"/>
</kw>
<kw name="Start_Testtool" owner="NetconfKeywords">
<kw name="NetconfKeywords__Deploy_Additional_Schemas" owner="NetconfKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:47.543423" level="INFO">Executing command 'rm -rf schemas 2&gt;&amp;1'.</msg>
<msg time="2026-08-15T23:54:47.589072" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:47.589296" level="INFO">${response} = </msg>
<var>${response}</var>
<arg>rm -rf schemas 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:47.543149" elapsed="0.046204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:47.590348" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:47.589715" elapsed="0.000728"/>
</kw>
<if>
<branch type="IF" condition="'${schemas}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="NOT RUN" start="2026-08-15T23:54:47.590880" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:47.590595" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:47.590554" elapsed="0.000481"/>
</if>
<kw name="Put Directory" owner="SSHLibrary">
<msg time="2026-08-15T23:54:50.248600" level="INFO">'/tmp/junos_19.4R1/junos-conf-multi-chassis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-multi-chassis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248707" level="INFO">'/tmp/junos_19.4R1/junos-rpc-interfaces@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-interfaces@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248746" level="INFO">'/tmp/junos_19.4R1/junos-rpc-programmable-rpd@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-programmable-rpd@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248780" level="INFO">'/tmp/junos_19.4R1/junos-rpc-quit@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-quit@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248839" level="INFO">'/tmp/junos_19.4R1/junos-rpc-app-engine@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-app-engine@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248875" level="INFO">'/tmp/junos_19.4R1/junos-rpc-file-mgd@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-file-mgd@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248909" level="INFO">'/tmp/junos_19.4R1/junos-rpc-pgm@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-pgm@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248943" level="INFO">'/tmp/junos_19.4R1/junos-rpc-helper@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-helper@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.248975" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mld@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mld@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249008" level="INFO">'/tmp/junos_19.4R1/junos-conf-logical-systems@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-logical-systems@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249041" level="INFO">'/tmp/junos_19.4R1/junos-rpc-accounting@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-accounting@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249074" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ancp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ancp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249107" level="INFO">'/tmp/junos_19.4R1/junos-rpc-extension-provider@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-extension-provider@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249140" level="INFO">'/tmp/junos_19.4R1/junos-rpc-auto-bandwidth@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-auto-bandwidth@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249172" level="INFO">'/tmp/junos_19.4R1/junos-rpc-system@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-system@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249205" level="INFO">'/tmp/junos_19.4R1/junos-rpc-authentication-whitelist@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-authentication-whitelist@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249238" level="INFO">'/tmp/junos_19.4R1/junos-rpc-validation@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-validation@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249271" level="INFO">'/tmp/junos_19.4R1/junos-conf-routing-instances@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-routing-instances@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249303" level="INFO">'/tmp/junos_19.4R1/junos-rpc-flight-recorder@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-flight-recorder@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249409" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mac-rewrite@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mac-rewrite@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249445" level="INFO">'/tmp/junos_19.4R1/junos-rpc-as-path@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-as-path@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249478" level="INFO">'/tmp/junos_19.4R1/junos-rpc-auto-configuration@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-auto-configuration@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249511" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ospf3@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ospf3@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249543" level="INFO">'/tmp/junos_19.4R1/junos-rpc-pfe@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-pfe@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249575" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dvmrp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dvmrp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249608" level="INFO">'/tmp/junos_19.4R1/junos-conf-routing-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-routing-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249640" level="INFO">'/tmp/junos_19.4R1/junos-rpc-arp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-arp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249672" level="INFO">'/tmp/junos_19.4R1/junos-rpc-op@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-op@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249704" level="INFO">'/tmp/junos_19.4R1/junos-rpc-analytics@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-analytics@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249736" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dot1x@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dot1x@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249769" level="INFO">'/tmp/junos_19.4R1/junos-rpc-restart@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-restart@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249822" level="INFO">'/tmp/junos_19.4R1/junos-rpc-lacp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-lacp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249858" level="INFO">'/tmp/junos_19.4R1/junos-rpc-request@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-request@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249891" level="INFO">'/tmp/junos_19.4R1/junos-rpc-task@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-task@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249923" level="INFO">'/tmp/junos_19.4R1/junos-rpc-l2circuit@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-l2circuit@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.249974" level="INFO">'/tmp/junos_19.4R1/junos-rpc-version@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-version@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250008" level="INFO">'/tmp/junos_19.4R1/junos-rpc-subscribers@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-subscribers@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250040" level="INFO">'/tmp/junos_19.4R1/junos-rpc-passive-monitoring@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-passive-monitoring@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250074" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ssl-certificates@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ssl-certificates@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250106" level="INFO">'/tmp/junos_19.4R1/junos-rpc-redundant-trunk-group@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-redundant-trunk-group@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250138" level="INFO">'/tmp/junos_19.4R1/junos-rpc-connections@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-connections@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250171" level="INFO">'/tmp/junos_19.4R1/junos-common-odl-extensions@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-common-odl-extensions@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250205" level="INFO">'/tmp/junos_19.4R1/junos-rpc-loop-detect@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-loop-detect@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250237" level="INFO">'/tmp/junos_19.4R1/junos-rpc-security@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-security@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250269" level="INFO">'/tmp/junos_19.4R1/junos-rpc-synchronous-ethernet@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-synchronous-ethernet@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250302" level="INFO">'/tmp/junos_19.4R1/junos-rpc-host@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-host@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250335" level="INFO">'/tmp/junos_19.4R1/junos-rpc-lldp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-lldp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250368" level="INFO">'/tmp/junos_19.4R1/junos-conf-access-profile@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-access-profile@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250400" level="INFO">'/tmp/junos_19.4R1/junos-rpc-poe@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-poe@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250433" level="INFO">'/tmp/junos_19.4R1/junos-rpc-agent@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-agent@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250466" level="INFO">'/tmp/junos_19.4R1/junos-rpc-spring-traffic-engineering@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-spring-traffic-engineering@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250501" level="INFO">'/tmp/junos_19.4R1/junos-conf-multicast-snooping-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-multicast-snooping-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250535" level="INFO">'/tmp/junos_19.4R1/junos-rpc-v4ov6-tunnels@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-v4ov6-tunnels@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250568" level="INFO">'/tmp/junos_19.4R1/junos-rpc-l2-learning@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-l2-learning@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250601" level="INFO">'/tmp/junos_19.4R1/junos-rpc-bridge@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-bridge@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250634" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mvrp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mvrp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250667" level="INFO">'/tmp/junos_19.4R1/junos-rpc-multi-chassis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-multi-chassis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250700" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ppp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ppp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250732" level="INFO">'/tmp/junos_19.4R1/junos-rpc-rsvp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-rsvp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250764" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ingress-replication@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ingress-replication@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250797" level="INFO">'/tmp/junos_19.4R1/junos-rpc-extension-service@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-extension-service@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250849" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dynamic-tunnels@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dynamic-tunnels@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250883" level="INFO">'/tmp/junos_19.4R1/junos-rpc-services@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-services@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250951" level="INFO">'/tmp/junos_19.4R1/junos-rpc-log@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-log@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.250987" level="INFO">'/tmp/junos_19.4R1/junos-rpc-database-replication@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-database-replication@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251021" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mvpn@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mvpn@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251054" level="INFO">'/tmp/junos_19.4R1/junos-rpc-forwarding-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-forwarding-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251088" level="INFO">'/tmp/junos_19.4R1/junos-rpc-policer@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-policer@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251120" level="INFO">'/tmp/junos_19.4R1/junos-conf-system@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-system@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251153" level="INFO">'/tmp/junos_19.4R1/junos-rpc-vmhost@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-vmhost@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251184" level="INFO">'/tmp/junos_19.4R1/junos-conf-event-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-event-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251217" level="INFO">'/tmp/junos_19.4R1/junos-rpc-bgp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-bgp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251249" level="INFO">'/tmp/junos_19.4R1/junos-rpc-save@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-save@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251281" level="INFO">'/tmp/junos_19.4R1/junos-rpc-monitor@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-monitor@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251314" level="INFO">'/tmp/junos_19.4R1/junos-conf-bridge-domains@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-bridge-domains@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251346" level="INFO">'/tmp/junos_19.4R1/junos-rpc-access-security@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-access-security@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251379" level="INFO">'/tmp/junos_19.4R1/junos-conf-vlans@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-vlans@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251411" level="INFO">'/tmp/junos_19.4R1/junos-rpc-trace@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-trace@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251443" level="INFO">'/tmp/junos_19.4R1/junos-rpc-event-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-event-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251475" level="INFO">'/tmp/junos_19.4R1/junos-conf-security@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-security@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251507" level="INFO">'/tmp/junos_19.4R1/junos-conf-interfaces@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-interfaces@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251539" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ephemeral-configuration@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ephemeral-configuration@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251572" level="INFO">'/tmp/junos_19.4R1/junos-rpc-link-management@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-link-management@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251606" level="INFO">'/tmp/junos_19.4R1/junos-conf-virtual-chassis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-virtual-chassis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251639" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ping@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ping@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251670" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dhcp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dhcp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251702" level="INFO">'/tmp/junos_19.4R1/junos-rpc-chassis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-chassis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251734" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ddos-protection@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ddos-protection@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251766" level="INFO">'/tmp/junos_19.4R1/junos-rpc-firewall@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-firewall@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251815" level="INFO">'/tmp/junos_19.4R1/junos-rpc-backup-selection@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-backup-selection@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251852" level="INFO">'/tmp/junos_19.4R1/junos-conf-fabric@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-fabric@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251885" level="INFO">'/tmp/junos_19.4R1/junos-rpc-igmp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-igmp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251918" level="INFO">'/tmp/junos_19.4R1/junos-rpc-file@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-file@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251951" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ldp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ldp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.251983" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dhcp-security@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dhcp-security@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252015" level="INFO">'/tmp/junos_19.4R1/junos-rpc-sflow@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-sflow@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252048" level="INFO">'/tmp/junos_19.4R1/junos-conf-firewall@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-firewall@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252081" level="INFO">'/tmp/junos_19.4R1/junos-rpc-msdp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-msdp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252113" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ospf@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ospf@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252145" level="INFO">'/tmp/junos_19.4R1/junos-rpc-virtual-chassis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-virtual-chassis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252177" level="INFO">'/tmp/junos_19.4R1/junos-conf-services@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-services@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252209" level="INFO">'/tmp/junos_19.4R1/junos-rpc-extensible-subscriber-services@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-extensible-subscriber-services@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252241" level="INFO">'/tmp/junos_19.4R1/junos-rpc-network-agent@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-network-agent@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252273" level="INFO">'/tmp/junos_19.4R1/junos-common-ddl-extensions@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-common-ddl-extensions@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252306" level="INFO">'/tmp/junos_19.4R1/junos-rpc-unified-edge@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-unified-edge@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252338" level="INFO">'/tmp/junos_19.4R1/junos-rpc-load@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-load@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252370" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mac-refresh@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mac-refresh@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252403" level="INFO">'/tmp/junos_19.4R1/junos-common-types@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-common-types@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252471" level="INFO">'/tmp/junos_19.4R1/junos-rpc-flexible-tunnels@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-flexible-tunnels@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252507" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ptp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ptp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252540" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ntp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ntp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252571" level="INFO">'/tmp/junos_19.4R1/junos-rpc-static-subscribers@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-static-subscribers@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252604" level="INFO">'/tmp/junos_19.4R1/junos-rpc-jdaf@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-jdaf@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252635" level="INFO">'/tmp/junos_19.4R1/junos-rpc-iccp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-iccp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252667" level="INFO">'/tmp/junos_19.4R1/junos-rpc-multicast@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-multicast@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252699" level="INFO">'/tmp/junos_19.4R1/junos-rpc-path-computation-client@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-path-computation-client@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252731" level="INFO">'/tmp/junos_19.4R1/junos-conf-switch-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-switch-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252763" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ilmi@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ilmi@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252795" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ripng@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ripng@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252847" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dynamic-profile@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dynamic-profile@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252880" level="INFO">'/tmp/junos_19.4R1/junos-rpc-l2cpd@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-l2cpd@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252911" level="INFO">'/tmp/junos_19.4R1/junos-conf-poe@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-poe@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252943" level="INFO">'/tmp/junos_19.4R1/junos-rpc-clear@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-clear@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.252975" level="INFO">'/tmp/junos_19.4R1/junos-rpc-network-access@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-network-access@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253007" level="INFO">'/tmp/junos_19.4R1/junos-rpc-event-viewer@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-event-viewer@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253038" level="INFO">'/tmp/junos_19.4R1/junos-conf-unified-edge@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-unified-edge@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253069" level="INFO">'/tmp/junos_19.4R1/junos-rpc-vpls@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-vpls@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253101" level="INFO">'/tmp/junos_19.4R1/junos-conf-diameter@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-diameter@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253133" level="INFO">'/tmp/junos_19.4R1/junos-rpc-pim@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-pim@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253165" level="INFO">'/tmp/junos_19.4R1/junos-rpc-performance-monitoring@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-performance-monitoring@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253197" level="INFO">'/tmp/junos_19.4R1/junos-rpc-snmp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-snmp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253229" level="INFO">'/tmp/junos_19.4R1/junos-rpc-aps@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-aps@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253260" level="INFO">'/tmp/junos_19.4R1/junos-rpc-r2cp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-r2cp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253292" level="INFO">'/tmp/junos_19.4R1/junos-rpc-shmlog@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-shmlog@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253324" level="INFO">'/tmp/junos_19.4R1/junos-rpc-vrrp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-vrrp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253356" level="INFO">'/tmp/junos_19.4R1/junos-rpc-set@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-set@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253388" level="INFO">'/tmp/junos_19.4R1/junos-rpc-sap@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-sap@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253421" level="INFO">'/tmp/junos_19.4R1/junos-rpc-traceroute@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-traceroute@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253454" level="INFO">'/tmp/junos_19.4R1/junos-conf-protocols@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-protocols@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253486" level="INFO">'/tmp/junos_19.4R1/junos-rpc-access-cac@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-access-cac@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253520" level="INFO">'/tmp/junos_19.4R1/junos-rpc-tcp-forwarding@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-tcp-forwarding@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253553" level="INFO">'/tmp/junos_19.4R1/junos-conf-policy-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-policy-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253585" level="INFO">'/tmp/junos_19.4R1/junos-rpc-diameter@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-diameter@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253617" level="INFO">'/tmp/junos_19.4R1/junos-rpc-spanning-tree@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-spanning-tree@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253649" level="INFO">'/tmp/junos_19.4R1/junos-conf-dynamic-profiles@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-dynamic-profiles@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253681" level="INFO">'/tmp/junos_19.4R1/junos-rpc-protection-group@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-protection-group@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253713" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ted@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ted@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253744" level="INFO">'/tmp/junos_19.4R1/junos-rpc-nonstop-routing@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-nonstop-routing@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253776" level="INFO">'/tmp/junos_19.4R1/junos-conf-vmhost@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-vmhost@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253825" level="INFO">'/tmp/junos_19.4R1/junos-rpc-isis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-isis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253858" level="INFO">'/tmp/junos_19.4R1/junos-conf-accounting-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-accounting-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253891" level="INFO">'/tmp/junos_19.4R1/junos-rpc-cli@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-cli@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.253923" level="INFO">'/tmp/junos_19.4R1/junos-conf-root@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-root@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254029" level="INFO">'/tmp/junos_19.4R1/junos-rpc-rollback-config@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-rollback-config@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254067" level="INFO">'/tmp/junos_19.4R1/junos-conf-snmp@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-snmp@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254100" level="INFO">'/tmp/junos_19.4R1/junos-rpc-hfrr@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-hfrr@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254132" level="INFO">'/tmp/junos_19.4R1/junos-rpc-rip@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-rip@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254163" level="INFO">'/tmp/junos_19.4R1/junos-rpc-bfd@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-bfd@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254195" level="INFO">'/tmp/junos_19.4R1/junos-rpc-syslog-filenames@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-syslog-filenames@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254227" level="INFO">'/tmp/junos_19.4R1/junos-conf-access@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-access@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254258" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ovsdb@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ovsdb@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254290" level="INFO">'/tmp/junos_19.4R1/junos-rpc-l2vpn@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-l2vpn@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254321" level="INFO">'/tmp/junos_19.4R1/junos-rpc-dhcpv6@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-dhcpv6@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254353" level="INFO">'/tmp/junos_19.4R1/junos-rpc-pppoe@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-pppoe@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254384" level="INFO">'/tmp/junos_19.4R1/junos-rpc-esis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-esis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254416" level="INFO">'/tmp/junos_19.4R1/junos-conf-forwarding-options@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-forwarding-options@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254447" level="INFO">'/tmp/junos_19.4R1/junos-rpc-help@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-help@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254479" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ethernet-switching@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ethernet-switching@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254511" level="INFO">'/tmp/junos_19.4R1/junos-rpc-ipv6@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-ipv6@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254543" level="INFO">'/tmp/junos_19.4R1/junos-rpc-amt@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-amt@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254574" level="INFO">'/tmp/junos_19.4R1/junos-conf-applications@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-applications@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254606" level="INFO">'/tmp/junos_19.4R1/junos-conf-chassis@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-chassis@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254638" level="INFO">'/tmp/junos_19.4R1/junos-rpc-oam@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-oam@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254671" level="INFO">'/tmp/junos_19.4R1/junos-rpc-test@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-test@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254702" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mpls@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mpls@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254733" level="INFO">'/tmp/junos_19.4R1/junos-rpc-vlans@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-vlans@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254766" level="INFO">'/tmp/junos_19.4R1/junos-rpc-class-of-service@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-class-of-service@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254815" level="INFO">'/tmp/junos_19.4R1/junos-rpc-evpn@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-evpn@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254851" level="INFO">'/tmp/junos_19.4R1/junos-rpc-remote-device-management@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-remote-device-management@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254883" level="INFO">'/tmp/junos_19.4R1/junos-conf-class-of-service@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-conf-class-of-service@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254915" level="INFO">'/tmp/junos_19.4R1/junos-rpc-route@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-route@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254947" level="INFO">'/tmp/junos_19.4R1/junos-rpc-mtrace@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-mtrace@2019-01-01.yang'</msg>
<msg time="2026-08-15T23:54:50.254979" level="INFO">'/tmp/junos_19.4R1/junos-rpc-captive-portal@2019-01-01.yang' -&gt; '/home/jenkins/./schemas/junos-rpc-captive-portal@2019-01-01.yang'</msg>
<arg>${schemas}</arg>
<arg>destination=./schemas</arg>
<doc>Uploads a directory, including its content, from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-15T23:54:47.591386" elapsed="2.663695"/>
</kw>
<kw name="List Directory" owner="SSHLibrary">
<msg time="2026-08-15T23:54:50.265996" level="INFO">183 items:
junos-common-ddl-extensions@2019-01-01.yang
junos-common-odl-extensions@2019-01-01.yang
junos-common-types@2019-01-01.yang
junos-conf-access-profile@2019-01-01.yang
junos-conf-access@2019-01-01.yang
junos-conf-accounting-options@2019-01-01.yang
junos-conf-applications@2019-01-01.yang
junos-conf-bridge-domains@2019-01-01.yang
junos-conf-chassis@2019-01-01.yang
junos-conf-class-of-service@2019-01-01.yang
junos-conf-diameter@2019-01-01.yang
junos-conf-dynamic-profiles@2019-01-01.yang
junos-conf-event-options@2019-01-01.yang
junos-conf-fabric@2019-01-01.yang
junos-conf-firewall@2019-01-01.yang
junos-conf-forwarding-options@2019-01-01.yang
junos-conf-interfaces@2019-01-01.yang
junos-conf-logical-systems@2019-01-01.yang
junos-conf-multi-chassis@2019-01-01.yang
junos-conf-multicast-snooping-options@2019-01-01.yang
junos-conf-poe@2019-01-01.yang
junos-conf-policy-options@2019-01-01.yang
junos-conf-protocols@2019-01-01.yang
junos-conf-root@2019-01-01.yang
junos-conf-routing-instances@2019-01-01.yang
junos-conf-routing-options@2019-01-01.yang
junos-conf-security@2019-01-01.yang
junos-conf-services@2019-01-01.yang
junos-conf-snmp@2019-01-01.yang
junos-conf-switch-options@2019-01-01.yang
junos-conf-system@2019-01-01.yang
junos-conf-unified-edge@2019-01-01.yang
junos-conf-virtual-chassis@2019-01-01.yang
junos-conf-vlans@2019-01-01.yang
junos-conf-vmhost@2019-01-01.yang
junos-rpc-access-cac@2019-01-01.yang
junos-rpc-access-security@2019-01-01.yang
junos-rpc-accounting@2019-01-01.yang
junos-rpc-agent@2019-01-01.yang
junos-rpc-amt@2019-01-01.yang
junos-rpc-analytics@2019-01-01.yang
junos-rpc-ancp@2019-01-01.yang
junos-rpc-app-engine@2019-01-01.yang
junos-rpc-aps@2019-01-01.yang
junos-rpc-arp@2019-01-01.yang
junos-rpc-as-path@2019-01-01.yang
junos-rpc-authentication-whitelist@2019-01-01.yang
junos-rpc-auto-bandwidth@2019-01-01.yang
junos-rpc-auto-configuration@2019-01-01.yang
junos-rpc-backup-selection@2019-01-01.yang
junos-rpc-bfd@2019-01-01.yang
junos-rpc-bgp@2019-01-01.yang
junos-rpc-bridge@2019-01-01.yang
junos-rpc-captive-portal@2019-01-01.yang
junos-rpc-chassis@2019-01-01.yang
junos-rpc-class-of-service@2019-01-01.yang
junos-rpc-clear@2019-01-01.yang
junos-rpc-cli@2019-01-01.yang
junos-rpc-connections@2019-01-01.yang
junos-rpc-database-replication@2019-01-01.yang
junos-rpc-ddos-protection@2019-01-01.yang
junos-rpc-dhcp-security@2019-01-01.yang
junos-rpc-dhcp@2019-01-01.yang
junos-rpc-dhcpv6@2019-01-01.yang
junos-rpc-diameter@2019-01-01.yang
junos-rpc-dot1x@2019-01-01.yang
junos-rpc-dvmrp@2019-01-01.yang
junos-rpc-dynamic-profile@2019-01-01.yang
junos-rpc-dynamic-tunnels@2019-01-01.yang
junos-rpc-ephemeral-configuration@2019-01-01.yang
junos-rpc-esis@2019-01-01.yang
junos-rpc-ethernet-switching@2019-01-01.yang
junos-rpc-event-options@2019-01-01.yang
junos-rpc-event-viewer@2019-01-01.yang
junos-rpc-evpn@2019-01-01.yang
junos-rpc-extensible-subscriber-services@2019-01-01.yang
junos-rpc-extension-provider@2019-01-01.yang
junos-rpc-extension-service@2019-01-01.yang
junos-rpc-file-mgd@2019-01-01.yang
junos-rpc-file@2019-01-01.yang
junos-rpc-firewall@2019-01-01.yang
junos-rpc-flexible-tunnels@2019-01-01.yang
junos-rpc-flight-recorder@2019-01-01.yang
junos-rpc-forwarding-options@2019-01-01.yang
junos-rpc-help@2019-01-01.yang
junos-rpc-helper@2019-01-01.yang
junos-rpc-hfrr@2019-01-01.yang
junos-rpc-host@2019-01-01.yang
junos-rpc-iccp@2019-01-01.yang
junos-rpc-igmp@2019-01-01.yang
junos-rpc-ilmi@2019-01-01.yang
junos-rpc-ingress-replication@2019-01-01.yang
junos-rpc-interfaces@2019-01-01.yang
junos-rpc-ipv6@2019-01-01.yang
junos-rpc-isis@2019-01-01.yang
junos-rpc-jdaf@2019-01-01.yang
junos-rpc-l2-learning@2019-01-01.yang
junos-rpc-l2circuit@2019-01-01.yang
junos-rpc-l2cpd@2019-01-01.yang
junos-rpc-l2vpn@2019-01-01.yang
junos-rpc-lacp@2019-01-01.yang
junos-rpc-ldp@2019-01-01.yang
junos-rpc-link-management@2019-01-01.yang
junos-rpc-lldp@2019-01-01.yang
junos-rpc-load@2019-01-01.yang
junos-rpc-log@2019-01-01.yang
junos-rpc-loop-detect@2019-01-01.yang
junos-rpc-mac-refresh@2019-01-01.yang
junos-rpc-mac-rewrite@2019-01-01.yang
junos-rpc-mld@2019-01-01.yang
junos-rpc-monitor@2019-01-01.yang
junos-rpc-mpls@2019-01-01.yang
junos-rpc-msdp@2019-01-01.yang
junos-rpc-mtrace@2019-01-01.yang
junos-rpc-multi-chassis@2019-01-01.yang
junos-rpc-multicast@2019-01-01.yang
junos-rpc-mvpn@2019-01-01.yang
junos-rpc-mvrp@2019-01-01.yang
junos-rpc-network-access@2019-01-01.yang
junos-rpc-network-agent@2019-01-01.yang
junos-rpc-nonstop-routing@2019-01-01.yang
junos-rpc-ntp@2019-01-01.yang
junos-rpc-oam@2019-01-01.yang
junos-rpc-op@2019-01-01.yang
junos-rpc-ospf3@2019-01-01.yang
junos-rpc-ospf@2019-01-01.yang
junos-rpc-ovsdb@2019-01-01.yang
junos-rpc-passive-monitoring@2019-01-01.yang
junos-rpc-path-computation-client@2019-01-01.yang
junos-rpc-performance-monitoring@2019-01-01.yang
junos-rpc-pfe@2019-01-01.yang
junos-rpc-pgm@2019-01-01.yang
junos-rpc-pim@2019-01-01.yang
junos-rpc-ping@2019-01-01.yang
junos-rpc-poe@2019-01-01.yang
junos-rpc-policer@2019-01-01.yang
junos-rpc-ppp@2019-01-01.yang
junos-rpc-pppoe@2019-01-01.yang
junos-rpc-programmable-rpd@2019-01-01.yang
junos-rpc-protection-group@2019-01-01.yang
junos-rpc-ptp@2019-01-01.yang
junos-rpc-quit@2019-01-01.yang
junos-rpc-r2cp@2019-01-01.yang
junos-rpc-redundant-trunk-group@2019-01-01.yang
junos-rpc-remote-device-management@2019-01-01.yang
junos-rpc-request@2019-01-01.yang
junos-rpc-restart@2019-01-01.yang
junos-rpc-rip@2019-01-01.yang
junos-rpc-ripng@2019-01-01.yang
junos-rpc-rollback-config@2019-01-01.yang
junos-rpc-route@2019-01-01.yang
junos-rpc-rsvp@2019-01-01.yang
junos-rpc-sap@2019-01-01.yang
junos-rpc-save@2019-01-01.yang
junos-rpc-security@2019-01-01.yang
junos-rpc-services@2019-01-01.yang
junos-rpc-set@2019-01-01.yang
junos-rpc-sflow@2019-01-01.yang
junos-rpc-shmlog@2019-01-01.yang
junos-rpc-snmp@2019-01-01.yang
junos-rpc-spanning-tree@2019-01-01.yang
junos-rpc-spring-traffic-engineering@2019-01-01.yang
junos-rpc-ssl-certificates@2019-01-01.yang
junos-rpc-static-subscribers@2019-01-01.yang
junos-rpc-subscribers@2019-01-01.yang
junos-rpc-synchronous-ethernet@2019-01-01.yang
junos-rpc-syslog-filenames@2019-01-01.yang
junos-rpc-system@2019-01-01.yang
junos-rpc-task@2019-01-01.yang
junos-rpc-tcp-forwarding@2019-01-01.yang
junos-rpc-ted@2019-01-01.yang
junos-rpc-test@2019-01-01.yang
junos-rpc-trace@2019-01-01.yang
junos-rpc-traceroute@2019-01-01.yang
junos-rpc-unified-edge@2019-01-01.yang
junos-rpc-v4ov6-tunnels@2019-01-01.yang
junos-rpc-validation@2019-01-01.yang
junos-rpc-version@2019-01-01.yang
junos-rpc-virtual-chassis@2019-01-01.yang
junos-rpc-vlans@2019-01-01.yang
junos-rpc-vmhost@2019-01-01.yang
junos-rpc-vpls@2019-01-01.yang
junos-rpc-vrrp@2019-01-01.yang</msg>
<arg>./schemas</arg>
<doc>Returns and logs items in the remote ``path``, optionally filtered with ``pattern``.</doc>
<status status="PASS" start="2026-08-15T23:54:50.255440" elapsed="0.010750"/>
</kw>
<return>
<value>--schemas-dir ./schemas</value>
<status status="PASS" start="2026-08-15T23:54:50.266268" elapsed="0.000067"/>
</return>
<msg time="2026-08-15T23:54:50.266523" level="INFO">${schemas_option} = --schemas-dir ./schemas</msg>
<var>${schemas_option}</var>
<arg>${schemas}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the additional schemas if any and returns a
command line argument to be added to the testtool commandline
to tell it to load them. While this code could be integrated
into its only user, I considered the resulting code to be too
unreadable as the actions are quite different in the two
possibilities (additional schemas present versus no additional
schemas present), therefore a separate keyword is used.</doc>
<status status="PASS" start="2026-08-15T23:54:47.542399" elapsed="2.724161"/>
</kw>
<kw name="NetconfKeywords__Deploy_Custom_RPC" owner="NetconfKeywords">
<if>
<branch type="IF" condition="'${rpc_config}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-15T23:54:50.267568" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-08-15T23:54:50.267389" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:50.267360" elapsed="0.000326"/>
</if>
<kw name="Copy_File_To_Tools_System" owner="SSHKeywords">
<arg>${TOOLS_SYSTEM_1_IP}</arg>
<arg>${rpc_config}</arg>
<arg>/tmp</arg>
<doc>Wrapper keyword to make it easier to copy a file to an Tools specific system</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.267981" elapsed="0.000035"/>
</kw>
<return>
<value>--rpc-config /tmp/customaction.xml</value>
<status status="NOT RUN" start="2026-08-15T23:54:50.268084" elapsed="0.000021"/>
</return>
<msg time="2026-08-15T23:54:50.270879" level="INFO">${rpc_config_option} = </msg>
<var>${rpc_config_option}</var>
<arg>${rpc_config}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the optional custom rpc file.
Drop out of the keyword, returning no command line argument when there
is no rpc file to deploy.</doc>
<status status="PASS" start="2026-08-15T23:54:50.267000" elapsed="0.003918"/>
</kw>
<kw name="Compose_Full_Java_Command" owner="NexusKeywords">
<kw name="Compose_Base_Java_Command" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk8"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_8_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_8_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:50.272432" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk11"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_11_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_11_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:50.272998" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk17"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_17_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_17_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:50.273475" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Compose_Dilemma_Filepath" owner="NexusKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:50.275104" level="INFO">Executing command 'ls -lA /usr/lib/jvm/java-21-openjdk-amd64/bin/java 2&gt;&amp;1'.</msg>
<msg time="2026-08-15T23:54:50.287417" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:50.287567" level="INFO">${out} = -rwxr-xr-x 1 root root 14456 Apr 26 09:33 /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<msg time="2026-08-15T23:54:50.287629" level="INFO">${rc} = 0</msg>
<var>${out}</var>
<var>${rc}</var>
<arg>ls -lA ${specific_path} 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:50.274922" elapsed="0.012738"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${specific_path}</value>
<status status="PASS" start="2026-08-15T23:54:50.287950" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-08-15T23:54:50.287772" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:50.287745" elapsed="0.000326"/>
</if>
<return>
<value>${default_path}</value>
<status status="NOT RUN" start="2026-08-15T23:54:50.288120" elapsed="0.000023"/>
</return>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Query active SSH connection, return specific path if it exists else default path.</doc>
<status status="PASS" start="2026-08-15T23:54:50.274516" elapsed="0.013849"/>
</kw>
<msg time="2026-08-15T23:54:50.288465" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>"""${openjdk}""" == "openjdk21"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:54:50.273971" elapsed="0.014603"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>java -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.288978" elapsed="0.000050"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>java</value>
<status status="NOT RUN" start="2026-08-15T23:54:50.289270" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:50.289187" elapsed="0.000171"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:54:50.289150" elapsed="0.000255"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<var>${java}</var>
<arg>echo $JAVA_HOME/bin/java 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.289723" elapsed="0.000046"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.290177" elapsed="0.000050"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-15T23:54:50.290465" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:50.290386" elapsed="0.000167"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:54:50.290350" elapsed="0.000250"/>
</if>
<kw name="Get Environment Variable" owner="OperatingSystem">
<var>${JAVA_HOME}</var>
<arg>JAVA_HOME</arg>
<arg>${EMPTY}</arg>
<doc>Returns the value of an environment variable with the given name.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.290937" elapsed="0.000048"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${java}</var>
<arg>"""${JAVA_HOME}"""!=""</arg>
<arg>${JAVA_HOME}/bin/java</arg>
<arg>false</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.291334" elapsed="0.000045"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.291719" elapsed="0.000044"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-15T23:54:50.292116" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:50.292027" elapsed="0.000180"/>
</branch>
<status status="NOT RUN" start="2026-08-15T23:54:50.291911" elapsed="0.000345"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unable to find Java; specify \${JDKVERSION}, put it to your PATH or set JAVA_HOME environment variable.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.292560" elapsed="0.000046"/>
</kw>
<msg time="2026-08-15T23:54:50.292856" level="INFO">${base_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<var>${base_command}</var>
<arg>openjdk=${openjdk}</arg>
<doc>Return string suitable for launching Java programs over SSHLibrary, depending on JRE version needed.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
Commands composed for one SSH connection shall not be reused on other SSH connections as the two connections may have different Java setups.
Not directly related to Nexus, but versioned Java tools may need this.</doc>
<status status="PASS" start="2026-08-15T23:54:50.272050" elapsed="0.020865"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.294072" level="INFO">${full_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx4G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-10.0.3-executable.jar  --device-count 1000 --debug false --schemas-dir ./schemas  --md-...</msg>
<var>${full_command}</var>
<arg>${base_command} ${options}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-15T23:54:50.293253" elapsed="0.000894"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.295085" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx4G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-10.0.3-executable.jar  --device-count 1000 --debug false --schemas-dir ./schemas  --md-sal true</msg>
<arg>${full_command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:50.294493" elapsed="0.000694"/>
</kw>
<return>
<value>${full_command}</value>
<status status="PASS" start="2026-08-15T23:54:50.295281" elapsed="0.000063"/>
</return>
<msg time="2026-08-15T23:54:50.295617" level="INFO">${command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx4G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-10.0.3-executable.jar  --device-count 1000 --debug false --schemas-dir ./schemas  --md-...</msg>
<var>${command}</var>
<arg>${java_options} -jar ${filename} ${tool_options} --device-count ${device-count} --debug ${debug} ${schemas_option} ${rpc_config_option} --md-sal ${mdsal}</arg>
<doc>Return full Bash command to run Java with given options.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
The options may include JVM options, application command line arguments, Bash redirects and other constructs.</doc>
<status status="PASS" start="2026-08-15T23:54:50.271266" elapsed="0.024412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.296603" level="INFO">Running testtool: /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx4G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-10.0.3-executable.jar  --device-count 1000 --debug false --schemas-dir ./schemas  --md-sal true</msg>
<arg>Running testtool: ${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-15T23:54:50.296054" elapsed="0.000649"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.301064" level="INFO">${name} = netconf-scale-max-devices-txt-Max-Devices</msg>
<var>${name}</var>
<arg>"""${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:50.300693" elapsed="0.000399"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.303415" level="INFO">${suffix} = </msg>
<var>${suffix}</var>
<arg>'${testcase}' != ''</arg>
<arg>--${testcase}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:54:50.301254" elapsed="0.002188"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:54:50.303792" level="INFO">${date} = 2026-08-15 23:54:50.304</msg>
<var>${date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:54:50.303606" elapsed="0.000228"/>
</kw>
<kw name="Convert Date" owner="DateTime">
<msg time="2026-08-15T23:54:50.306898" level="INFO">${timestamp} = 1786838090.304</msg>
<var>${timestamp}</var>
<arg>${date}</arg>
<arg>epoch</arg>
<doc>Converts between supported `date formats`.</doc>
<status status="PASS" start="2026-08-15T23:54:50.303985" elapsed="0.002943"/>
</kw>
<return>
<value>${testtool}--${name}${suffix}.${timestamp}.log</value>
<status status="PASS" start="2026-08-15T23:54:50.306978" elapsed="0.000030"/>
</return>
<msg time="2026-08-15T23:54:50.307220" level="INFO">${logfile} = testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log</msg>
<var>${logfile}</var>
<arg>testtool</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="PASS" start="2026-08-15T23:54:50.297244" elapsed="0.010002"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.312178" level="INFO">${testtool_log} = testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log</msg>
<arg>${testtool_log}</arg>
<arg>${logfile}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:54:50.307413" elapsed="0.004814"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-15T23:54:50.332254" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx4G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-10.0.3-executable.jar  --device-count 1000 --debug false --schemas-dir ./schemas  --md-sal true &gt;testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log 2&gt;&amp;1</msg>
<arg>${command} &gt;${logfile} 2&gt;&amp;1</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-15T23:54:50.312382" elapsed="0.019935"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.336407" level="INFO">${NetconfKeywords__testtool_device_count} = 1000</msg>
<arg>${NetconfKeywords__testtool_device_count}</arg>
<arg>${device-count}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:54:50.332487" elapsed="0.003967"/>
</kw>
<kw name="Perform_Operation_On_Each_Device" owner="NetconfKeywords">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:54:50.337275" level="INFO">${current_Date} = 2026-08-15 23:54:50.337</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:54:50.337120" elapsed="0.000182"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-08-15T23:54:50.337779" level="INFO">${deadline_Date} = 2026-08-16 00:39:50.337</msg>
<var>${deadline_Date}</var>
<arg>${current_Date}</arg>
<arg>${timeout}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-08-15T23:54:50.337452" elapsed="0.000369"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.342574" level="INFO">${current_port} = 17830</msg>
<arg>${current_port}</arg>
<arg>${BASE_NETCONF_DEVICE_PORT}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:54:50.338028" elapsed="0.004593"/>
</kw>
<kw name="Repeat Keyword" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.343110" level="INFO">Repeating keyword, round 1/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:54:50.344216" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:54:50.344107" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:50.344087" elapsed="0.000195"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:54:50.344581" level="INFO">${current_Date} = 2026-08-15 23:54:50.345</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:54:50.344425" elapsed="0.000182"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:54:50.345083" level="INFO">${ellapsed_seconds} = 2699.992</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:54:50.344756" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.345427" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:54:50.345179" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:50.345161" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:54:50.343871" elapsed="0.001679"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.346092" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:50.345697" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.347523" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:50.347188" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.349705" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:50.348729" elapsed="0.001057"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:50.352322" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:50.364580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:50.364720" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:50.352225" elapsed="0.012531"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:50.365363" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:54:50.365450" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:50.351529" elapsed="0.014486"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:50.366537" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:50.426458" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:50.426673" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:50.366233" elapsed="0.060494"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:50.426875" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:54:50.427280" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:50.351094" elapsed="0.076294"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:50.428948" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:50.427990" elapsed="0.001121">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:50.350280" elapsed="0.079164">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:50.348280" elapsed="0.081465">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:51.434989" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:51.432844" elapsed="0.002361"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:51.441516" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:51.455868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:51.456101" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:51.441187" elapsed="0.014973"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:51.457154" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:54:51.457293" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:51.439408" elapsed="0.018873"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:51.459224" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:51.515506" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:51.515722" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:51.458638" elapsed="0.057139"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:51.515935" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:54:51.516351" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:51.438418" elapsed="0.078041"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:51.518059" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:51.517059" elapsed="0.001157">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:51.436423" elapsed="0.082125">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:51.431338" elapsed="0.087551">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:52.523226" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:52.521207" elapsed="0.002208"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:52.529351" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:52.542835" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:52.543057" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:52.529191" elapsed="0.013923"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:52.544063" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:54:52.544200" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:52.527378" elapsed="0.017644"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:52.545884" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:52.603419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:52.603626" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:52.545372" elapsed="0.058307"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:52.603791" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:54:52.604243" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:52.526409" elapsed="0.077942"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:52.605951" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:52.604968" elapsed="0.001147">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:52.524460" elapsed="0.081987">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:52.519768" elapsed="0.086976">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:53.611245" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:53.609148" elapsed="0.002289"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:53.617898" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:53.631576" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:53.631833" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:53.617694" elapsed="0.014202"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:53.632893" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:54:53.633032" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:53.616229" elapsed="0.017621"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:53.634689" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:53.685182" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:53.685450" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:53.634206" elapsed="0.051299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:53.685630" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:54:53.686136" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:53.615147" elapsed="0.071099"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:53.687929" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:53.686872" elapsed="0.001234">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:53.612529" elapsed="0.076040">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:53.607670" elapsed="0.081300">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:54.693443" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:54.691307" elapsed="0.002329"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:54.700162" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:54.713472" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:54.713579" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:54.699895" elapsed="0.013711"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:54.714072" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:54:54.714135" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:54.698124" elapsed="0.016761"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:54.715752" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:54.771170" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:54.771399" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:54.715238" elapsed="0.056217"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:54.771575" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:54:54.772079" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:54.696916" elapsed="0.075279"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:54.774406" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:54.772881" elapsed="0.001694">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:54.694714" elapsed="0.080271">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:54.689920" elapsed="0.085368">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:55.780026" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:55.777746" elapsed="0.002484"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:55.785493" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:55.798837" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:55.798980" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:55.785370" elapsed="0.013647"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:55.799632" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:54:55.799718" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:55.784557" elapsed="0.015728"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:55.800905" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:55.848391" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:55.848614" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:55.800509" elapsed="0.048160"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:55.848783" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:54:55.849235" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:55.783546" elapsed="0.065797"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:55.850904" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:55.849939" elapsed="0.001123">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:55.781325" elapsed="0.070106">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:55.776232" elapsed="0.075500">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:56.856443" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:56.854215" elapsed="0.002497"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:56.862207" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:56.875674" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:56.875855" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:56.862044" elapsed="0.013851"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:56.876498" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:54:56.876585" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:56.860497" elapsed="0.016626"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:56.877652" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:56.934789" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:56.935212" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:56.877344" elapsed="0.057929"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:56.935456" elapsed="0.000134"/>
</return>
<msg time="2026-08-15T23:54:56.936046" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:56.859885" elapsed="0.076275"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:56.939084" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:56.937865" elapsed="0.001384">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:56.858022" elapsed="0.081579">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:56.852694" elapsed="0.087260">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:57.944266" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:57.942260" elapsed="0.002197"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:57.950931" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:57.964935" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:57.965163" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:57.950646" elapsed="0.014575"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:57.966215" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:54:57.966355" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:57.948947" elapsed="0.018217"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:57.968032" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:58.026930" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:58.027147" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:57.967514" elapsed="0.059687"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:58.027319" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:54:58.027737" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:57.947877" elapsed="0.080015"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:58.029450" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:58.028461" elapsed="0.001150">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:57.945515" elapsed="0.084465">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:57.940897" elapsed="0.089415">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:54:59.034754" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:54:59.032688" elapsed="0.002291"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:59.041276" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:54:59.054367" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:59.054585" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:59.041041" elapsed="0.013603"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:54:59.055586" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:54:59.055718" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:54:59.039452" elapsed="0.017089"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:54:59.057395" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:54:59.115906" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:54:59.116324" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:54:59.056916" elapsed="0.059481"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:54:59.116582" elapsed="0.000137"/>
</return>
<msg time="2026-08-15T23:54:59.117199" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:54:59.038493" elapsed="0.078823"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:54:59.119309" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:54:59.118111" elapsed="0.001380">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:54:59.036008" elapsed="0.083891">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:54:59.031292" elapsed="0.088931">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:00.124668" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:00.122612" elapsed="0.002297"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:00.130283" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:00.142796" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:00.143055" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:00.130164" elapsed="0.012952"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:00.144087" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:00.144227" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:00.129372" elapsed="0.015660"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:00.145959" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:00.202865" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:00.203077" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:00.145417" elapsed="0.057715"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:00.203244" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:00.203654" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:00.128194" elapsed="0.075568"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:00.205391" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:00.204369" elapsed="0.001180">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:00.126019" elapsed="0.079911">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:00.121229" elapsed="0.085004">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:01.210602" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:01.208456" elapsed="0.002408"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:01.215535" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:01.228157" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:01.228297" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:01.215384" elapsed="0.012950"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:01.229325" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:01.229463" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:01.214381" elapsed="0.015863"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:01.231109" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:01.290596" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:01.290861" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:01.230595" elapsed="0.060328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:01.291056" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:01.291487" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:01.213737" elapsed="0.077859"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:01.293386" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:01.292237" elapsed="0.001257">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:01.211932" elapsed="0.081774">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:01.207106" elapsed="0.086826">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:02.298572" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:02.296382" elapsed="0.002376"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:02.304168" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:02.316962" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:02.317196" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:02.303988" elapsed="0.013268"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:02.318234" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:02.318371" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:02.302451" elapsed="0.016690"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:02.320013" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:02.378671" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:02.378924" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:02.319490" elapsed="0.059492"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:02.379096" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:02.379509" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:02.301733" elapsed="0.077883"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:02.381242" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:02.380269" elapsed="0.001134">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:02.299787" elapsed="0.081946">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:02.294851" elapsed="0.087228">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:03.385856" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:03.383432" elapsed="0.002522"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:03.388673" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:03.411673" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:03.411850" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:03.388485" elapsed="0.023405"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:03.412502" elapsed="0.000037"/>
</kw>
<msg time="2026-08-15T23:55:03.412590" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:03.387710" elapsed="0.025423"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:03.413664" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:03.479578" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:03.479847" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:03.413356" elapsed="0.066525"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:03.479974" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:03.480244" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:03.387249" elapsed="0.093047"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:03.481253" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:03.480629" elapsed="0.000704">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:03.386414" elapsed="0.095080">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:03.382699" elapsed="0.098944">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:04.486911" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:04.484738" elapsed="0.002436"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:04.490889" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:04.503913" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:04.504077" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:04.490712" elapsed="0.013403"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:04.504744" elapsed="0.000037"/>
</kw>
<msg time="2026-08-15T23:55:04.504855" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:04.489717" elapsed="0.015723"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:04.506006" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:04.562881" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:04.563153" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:04.505670" elapsed="0.057540"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:04.563327" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:04.563760" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:04.489129" elapsed="0.074782"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:04.565536" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:04.564500" elapsed="0.001194">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:04.487970" elapsed="0.078099">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:04.482543" elapsed="0.083830">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:05.571107" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:05.568772" elapsed="0.002547"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:05.575194" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:05.588790" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:05.588959" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:05.575032" elapsed="0.013969"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:05.589750" elapsed="0.000108"/>
</kw>
<msg time="2026-08-15T23:55:05.589943" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:05.573985" elapsed="0.017301"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:05.592167" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:05.646950" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:05.647188" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:05.591642" elapsed="0.055603"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:05.647372" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:55:05.647879" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:05.573309" elapsed="0.074689"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:05.649614" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:05.648576" elapsed="0.001203">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:05.572120" elapsed="0.078036">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:05.567320" elapsed="0.083170">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:06.655016" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:06.652923" elapsed="0.002287"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:06.661407" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:06.674845" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:06.675081" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:06.661136" elapsed="0.014005"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:06.676180" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:06.676320" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:06.659375" elapsed="0.017734"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:06.678032" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:06.737965" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:06.738182" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:06.677456" elapsed="0.060780"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:06.738353" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:06.738781" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:06.658327" elapsed="0.080617"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:06.740553" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:06.739532" elapsed="0.001186">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:06.656329" elapsed="0.084760">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:06.651484" elapsed="0.089928">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:07.745954" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:07.743875" elapsed="0.002272"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:07.755160" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:07.768163" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:07.768263" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:07.755044" elapsed="0.013246"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:07.768725" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:55:07.768789" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:07.753692" elapsed="0.015488"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:07.769592" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:07.826637" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:07.826898" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:07.769334" elapsed="0.057622"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:07.827072" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:07.827502" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:07.749366" elapsed="0.078244"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:07.829251" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:07.828221" elapsed="0.001224">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:07.747278" elapsed="0.082507">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:07.742378" elapsed="0.087744">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:08.834609" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:08.832380" elapsed="0.002482"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:08.841529" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:08.854634" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:08.854902" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:08.841279" elapsed="0.013690"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:08.855963" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:08.856107" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:08.839492" elapsed="0.017479"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:08.857918" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:08.915215" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:08.915491" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:08.857361" elapsed="0.058190"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:08.915690" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:55:08.916251" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:08.838301" elapsed="0.078072"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:08.918196" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:08.917069" elapsed="0.001290">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:08.836079" elapsed="0.082632">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:08.831012" elapsed="0.088061">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:09.924503" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:09.922022" elapsed="0.002724"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:09.929753" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:09.942675" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:09.942935" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:09.929634" elapsed="0.013364"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:09.943941" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:09.944081" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:09.928890" elapsed="0.016064"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:09.946022" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:10.002546" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:10.002767" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:09.945381" elapsed="0.057480"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:10.002978" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:10.003399" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:09.928085" elapsed="0.075423"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:10.005130" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:10.004121" elapsed="0.001170">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:09.926059" elapsed="0.079562">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:09.919981" elapsed="0.085988">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:11.010240" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:11.008241" elapsed="0.002192"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:11.014961" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:11.027610" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:11.027750" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:11.014719" elapsed="0.013107"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:11.028413" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:55:11.028500" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:11.013710" elapsed="0.015298"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:11.029533" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:11.086396" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:11.086610" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:11.029229" elapsed="0.057437"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:11.086778" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:55:11.087240" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:11.013120" elapsed="0.074231"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:11.089173" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:11.087984" elapsed="0.001360">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:11.011481" elapsed="0.078298">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:11.006886" elapsed="0.083329">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:12.095188" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:12.093031" elapsed="0.002383"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:12.101105" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:12.114231" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:12.114495" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:12.100911" elapsed="0.013626"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:12.115473" elapsed="0.000045"/>
</kw>
<msg time="2026-08-15T23:55:12.115578" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:12.099478" elapsed="0.016760"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:12.116913" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:12.184918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:12.185360" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:12.116515" elapsed="0.068905"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:12.185605" elapsed="0.000143"/>
</return>
<msg time="2026-08-15T23:55:12.186286" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:12.098359" elapsed="0.088044"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-15T23:55:12.188568" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-15T23:55:12.187198" elapsed="0.001570">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-15T23:55:12.096482" elapsed="0.092778">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:12.091374" elapsed="0.098214">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.194651" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.192483" elapsed="0.002482"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.200658" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.213469" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.213698" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.200521" elapsed="0.013237"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.214866" elapsed="0.000071"/>
</kw>
<msg time="2026-08-15T23:55:13.215024" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.199206" elapsed="0.016689"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.216754" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:13.284413" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.284633" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.216254" elapsed="0.068435"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:13.284840" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:13.285282" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.197982" elapsed="0.087409"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:13.286016" elapsed="0.001074"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.196072" elapsed="0.091238"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.190706" elapsed="0.096793"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:54:50.347710" elapsed="22.939892"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:54:50.346728" elapsed="22.941005"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:54:50.346279" elapsed="22.941605"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.289066" level="INFO">${next} = 17831</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.288245" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.290443" level="INFO">${current_port} = 17831</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:13.289499" elapsed="0.001041"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:54:50.343304" elapsed="22.947371"/>
</kw>
<msg time="2026-08-15T23:55:13.290883" level="INFO">Repeating keyword, round 2/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:13.293471" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:13.293224" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.293180" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.294386" level="INFO">${current_Date} = 2026-08-15 23:55:13.294</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:13.293985" elapsed="0.000460"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.295499" level="INFO">${ellapsed_seconds} = 2677.043</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:13.294909" elapsed="0.000617"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.295906" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:13.295600" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.295580" elapsed="0.000410"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:13.292654" elapsed="0.003382"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.296565" level="INFO">${number} = 2</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.296184" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.298067" level="INFO">${number} = 2</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.297690" elapsed="0.000404"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.300206" level="INFO">${device-port} = 17831</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.299378" elapsed="0.000914"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.303168" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.335911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.336166" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.303064" elapsed="0.033163"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.337372" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:13.337518" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.302120" elapsed="0.036099"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.339244" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17831 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:13.404538" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.404793" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.338580" elapsed="0.066310"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:13.405021" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:55:13.405507" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.301682" elapsed="0.103938"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:13.406277" elapsed="0.001136"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.300749" elapsed="0.106971"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.298903" elapsed="0.109070"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:13.298261" elapsed="0.109823"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.297231" elapsed="0.110987"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:13.296750" elapsed="0.111566"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.409509" level="INFO">${next} = 17832</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.408672" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.411066" level="INFO">${current_port} = 17832</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:13.409989" elapsed="0.001185"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.291349" elapsed="0.119962"/>
</kw>
<msg time="2026-08-15T23:55:13.411438" level="INFO">Repeating keyword, round 3/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:13.414185" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:13.413927" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.413879" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.415244" level="INFO">${current_Date} = 2026-08-15 23:55:13.415</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:13.414731" elapsed="0.000542"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.415865" level="INFO">${ellapsed_seconds} = 2676.922</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:13.415452" elapsed="0.000440"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.416254" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:13.415971" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.415952" elapsed="0.000382"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:13.413344" elapsed="0.003035"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.416913" level="INFO">${number} = 3</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.416527" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.418426" level="INFO">${number} = 3</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.418060" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.420582" level="INFO">${device-port} = 17832</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.419719" elapsed="0.000948"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.423556" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.456300" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.456534" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.423245" elapsed="0.033348"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.457536" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:13.457672" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.422445" elapsed="0.035987"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.459345" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17832 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:13.524138" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.524358" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.458849" elapsed="0.065565"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:13.524526" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:13.525100" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.422019" elapsed="0.103217"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:13.525979" elapsed="0.001193"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.421168" elapsed="0.106238"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.419261" elapsed="0.108397"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:13.418632" elapsed="0.109250"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.417575" elapsed="0.110485"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:13.417099" elapsed="0.111076"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.529575" level="INFO">${next} = 17833</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.528600" elapsed="0.001045"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.531336" level="INFO">${current_port} = 17833</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:13.530140" elapsed="0.001318"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.411977" elapsed="0.119638"/>
</kw>
<msg time="2026-08-15T23:55:13.531719" level="INFO">Repeating keyword, round 4/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:13.534412" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:13.534257" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.534229" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.535136" level="INFO">${current_Date} = 2026-08-15 23:55:13.535</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:13.534786" elapsed="0.000396"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.535767" level="INFO">${ellapsed_seconds} = 2676.802</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:13.535380" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.536214" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:13.535903" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.535881" elapsed="0.000416"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:13.533719" elapsed="0.002625"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.537036" level="INFO">${number} = 4</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.536550" elapsed="0.000518"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.538627" level="INFO">${number} = 4</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.538241" elapsed="0.000414"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.540681" level="INFO">${device-port} = 17833</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.539887" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.543387" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.576602" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.576871" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.543284" elapsed="0.033651"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.577887" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:13.578025" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.542517" elapsed="0.036183"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.579717" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17833 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:13.644588" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.645045" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.579221" elapsed="0.065887"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:13.645292" elapsed="0.000128"/>
</return>
<msg time="2026-08-15T23:55:13.645927" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.542081" elapsed="0.103962"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:13.646879" elapsed="0.001426"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.541252" elapsed="0.107253"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.539402" elapsed="0.109302"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:13.538854" elapsed="0.109997"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.537755" elapsed="0.111238"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:13.537262" elapsed="0.111833"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.650328" level="INFO">${next} = 17834</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.649461" elapsed="0.000925"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.651911" level="INFO">${current_port} = 17834</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:13.650879" elapsed="0.001130"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.532314" elapsed="0.119830"/>
</kw>
<msg time="2026-08-15T23:55:13.652243" level="INFO">Repeating keyword, round 5/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:13.655150" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:13.654883" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.654829" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.655662" level="INFO">${current_Date} = 2026-08-15 23:55:13.656</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:13.655442" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.656279" level="INFO">${ellapsed_seconds} = 2676.681</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:13.655860" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.656690" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:13.656399" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.656376" elapsed="0.000396"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:13.654224" elapsed="0.002608"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.657366" level="INFO">${number} = 5</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.656982" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.658921" level="INFO">${number} = 5</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.658483" elapsed="0.000467"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.661118" level="INFO">${device-port} = 17834</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.660251" elapsed="0.000954"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.664491" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.693179" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.693652" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.664015" elapsed="0.029706"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.695289" elapsed="0.000082"/>
</kw>
<msg time="2026-08-15T23:55:13.695467" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.663242" elapsed="0.033229"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.697526" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17834 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:13.760379" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.760607" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.696934" elapsed="0.063728"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:13.760781" elapsed="0.000130"/>
</return>
<msg time="2026-08-15T23:55:13.761307" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.662764" elapsed="0.098658"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:13.762053" elapsed="0.001324"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.661670" elapsed="0.101907"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.659744" elapsed="0.104046"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:13.659116" elapsed="0.104827"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.658030" elapsed="0.106044"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:13.657552" elapsed="0.106620"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.765396" level="INFO">${next} = 17835</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.764525" elapsed="0.000932"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.766906" level="INFO">${current_port} = 17835</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:13.765878" elapsed="0.001130"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.652785" elapsed="0.114357"/>
</kw>
<msg time="2026-08-15T23:55:13.767230" level="INFO">Repeating keyword, round 6/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:13.769942" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:13.769643" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.769598" elapsed="0.000488"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.770996" level="INFO">${current_Date} = 2026-08-15 23:55:13.771</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:13.770551" elapsed="0.000505"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.771774" level="INFO">${ellapsed_seconds} = 2676.566</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:13.771380" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.772179" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:13.771888" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.771869" elapsed="0.000389"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:13.769107" elapsed="0.003196"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.772829" level="INFO">${number} = 6</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.772449" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.774295" level="INFO">${number} = 6</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.773935" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.776370" level="INFO">${device-port} = 17835</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.775544" elapsed="0.000914"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.779190" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.812533" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.812761" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.779086" elapsed="0.033773"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.813744" elapsed="0.000086"/>
</kw>
<msg time="2026-08-15T23:55:13.813913" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.778203" elapsed="0.036498"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.815579" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17835 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:13.885574" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.885788" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.815093" elapsed="0.070789"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:13.885994" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:13.886443" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.777761" elapsed="0.108797"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:13.887164" elapsed="0.000890"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.776948" elapsed="0.111295"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.775093" elapsed="0.113339"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:13.774499" elapsed="0.114034"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.773472" elapsed="0.115184"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:13.773016" elapsed="0.115734"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.889952" level="INFO">${next} = 17836</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.889147" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.891378" level="INFO">${current_port} = 17836</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:13.890378" elapsed="0.001062"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.767696" elapsed="0.123827"/>
</kw>
<msg time="2026-08-15T23:55:13.891578" level="INFO">Repeating keyword, round 7/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:13.893192" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:13.893039" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.893011" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.893702" level="INFO">${current_Date} = 2026-08-15 23:55:13.894</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:13.893483" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:13.894427" level="INFO">${ellapsed_seconds} = 2676.443</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:13.893968" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.894922" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:13.894566" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:13.894540" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:13.892683" elapsed="0.002413"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.895832" level="INFO">${number} = 7</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.895304" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.897863" level="INFO">${number} = 7</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.897362" elapsed="0.000539"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:13.900742" level="INFO">${device-port} = 17836</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:13.899612" elapsed="0.001280"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.904336" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:13.936508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:13.936770" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.904235" elapsed="0.032626"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:13.937880" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:13.938020" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:13.903307" elapsed="0.035667"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:13.939893" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17836 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.014580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.014845" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:13.939346" elapsed="0.075559"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.015021" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:14.015458" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:13.902664" elapsed="0.112904"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.016177" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:13.901510" elapsed="0.115799"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:13.898977" elapsed="0.118524"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:13.898124" elapsed="0.119480"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.896711" elapsed="0.121018"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:13.896088" elapsed="0.121786"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.019197" level="INFO">${next} = 17837</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.018234" elapsed="0.001024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.020567" level="INFO">${current_port} = 17837</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.019631" elapsed="0.001032"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:13.891894" elapsed="0.128901"/>
</kw>
<msg time="2026-08-15T23:55:14.020946" level="INFO">Repeating keyword, round 8/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.023623" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.023372" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.023326" elapsed="0.000442"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.024591" level="INFO">${current_Date} = 2026-08-15 23:55:14.024</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.024216" elapsed="0.000435"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.025751" level="INFO">${ellapsed_seconds} = 2676.313</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.025019" elapsed="0.000822"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.026632" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.026003" elapsed="0.000759"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.025962" elapsed="0.000900"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.022795" elapsed="0.004176"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.027628" level="INFO">${number} = 8</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.027259" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.029105" level="INFO">${number} = 8</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.028734" elapsed="0.000398"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.031363" level="INFO">${device-port} = 17837</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.030506" elapsed="0.000941"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.034484" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.060665" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.060923" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.034356" elapsed="0.026629"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.061910" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:14.062048" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.033369" elapsed="0.029413"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.063669" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17837 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.132606" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.132860" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.063183" elapsed="0.069736"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.133031" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:14.133448" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.032841" elapsed="0.100717"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.134186" elapsed="0.001098"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.031960" elapsed="0.103522"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.029868" elapsed="0.105806"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.029296" elapsed="0.106478"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.028283" elapsed="0.107680"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.027830" elapsed="0.108229"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.137220" level="INFO">${next} = 17838</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.136411" elapsed="0.000869"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.138709" level="INFO">${current_port} = 17838</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.137646" elapsed="0.001252"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.021398" elapsed="0.117640"/>
</kw>
<msg time="2026-08-15T23:55:14.139127" level="INFO">Repeating keyword, round 9/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.140894" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.140711" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.140682" elapsed="0.000301"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.141417" level="INFO">${current_Date} = 2026-08-15 23:55:14.141</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.141188" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.142134" level="INFO">${ellapsed_seconds} = 2676.196</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.141659" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.142636" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.142290" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.142242" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.140374" elapsed="0.002459"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.143553" level="INFO">${number} = 9</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.143041" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.145610" level="INFO">${number} = 9</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.145124" elapsed="0.000523"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.148517" level="INFO">${device-port} = 17838</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.147374" elapsed="0.001257"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.152518" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.185378" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.185606" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.152382" elapsed="0.033283"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.186668" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:14.186838" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.151147" elapsed="0.036602"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.188678" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17838 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.257419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.257651" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.188142" elapsed="0.069567"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.257868" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:14.258436" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.150469" elapsed="0.108107"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.259226" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.149297" elapsed="0.111058"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.146707" elapsed="0.113866"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.145916" elapsed="0.114833"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.144459" elapsed="0.116486"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.143826" elapsed="0.117220"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.262276" level="INFO">${next} = 17839</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.261403" elapsed="0.000939"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.263680" level="INFO">${current_port} = 17839</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.262720" elapsed="0.001060"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.139437" elapsed="0.124541"/>
</kw>
<msg time="2026-08-15T23:55:14.264067" level="INFO">Repeating keyword, round 10/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.266687" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.266439" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.266394" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.267492" level="INFO">${current_Date} = 2026-08-15 23:55:14.267</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.267257" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.268206" level="INFO">${ellapsed_seconds} = 2676.07</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.267740" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.268683" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.268342" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.268316" elapsed="0.000478"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.265846" elapsed="0.003036"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.269606" level="INFO">${number} = 10</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.269090" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.271659" level="INFO">${number} = 10</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.271180" elapsed="0.000517"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.274510" level="INFO">${device-port} = 17839</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.273341" elapsed="0.001286"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.280676" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.308874" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.309123" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.280563" elapsed="0.028619"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.310155" elapsed="0.000081"/>
</kw>
<msg time="2026-08-15T23:55:14.310316" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.277037" elapsed="0.034064"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.311995" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17839 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.381056" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.381288" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.311462" elapsed="0.069889"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.381468" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:14.381959" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.276429" elapsed="0.105643"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.382682" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.275291" elapsed="0.108577"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.272679" elapsed="0.111434"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.271942" elapsed="0.112299"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.270536" elapsed="0.113845"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.269886" elapsed="0.114599"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.385789" level="INFO">${next} = 17840</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.384962" elapsed="0.000941"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.387282" level="INFO">${current_port} = 17840</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.386320" elapsed="0.001079"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.264517" elapsed="0.123037"/>
</kw>
<msg time="2026-08-15T23:55:14.387644" level="INFO">Repeating keyword, round 11/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.390510" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.390124" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.390080" elapsed="0.000579"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.391383" level="INFO">${current_Date} = 2026-08-15 23:55:14.391</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.391034" elapsed="0.000382"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.391985" level="INFO">${ellapsed_seconds} = 2675.946</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.391591" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.392359" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.392083" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.392065" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.389553" elapsed="0.002931"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.393036" level="INFO">${number} = 11</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.392639" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.394536" level="INFO">${number} = 11</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.394182" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.396632" level="INFO">${device-port} = 17840</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.395785" elapsed="0.000933"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.399723" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.433297" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.433558" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.399570" elapsed="0.034047"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.434701" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:14.434878" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.398521" elapsed="0.037135"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.436544" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17840 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.505134" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.505400" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.436038" elapsed="0.069418"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.505585" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:14.506122" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.398058" elapsed="0.108180"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.506890" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.397205" elapsed="0.110850"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.395314" elapsed="0.112931"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.394736" elapsed="0.113613"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.393689" elapsed="0.114788"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.393222" elapsed="0.115351"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.509745" level="INFO">${next} = 17841</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.508969" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.511195" level="INFO">${current_port} = 17841</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.510269" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.388195" elapsed="0.123229"/>
</kw>
<msg time="2026-08-15T23:55:14.511509" level="INFO">Repeating keyword, round 12/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.514204" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.513903" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.513855" elapsed="0.000493"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.515179" level="INFO">${current_Date} = 2026-08-15 23:55:14.515</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.514770" elapsed="0.000475"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.515965" level="INFO">${ellapsed_seconds} = 2675.822</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.515467" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.516460" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.516102" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.516075" elapsed="0.000495"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.513331" elapsed="0.003303"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.517379" level="INFO">${number} = 12</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.516868" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.519457" level="INFO">${number} = 12</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.518963" elapsed="0.000532"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.522302" level="INFO">${device-port} = 17841</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.521169" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.526355" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.557226" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.557463" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.525758" elapsed="0.031766"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.558527" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:14.558665" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.524778" elapsed="0.034659"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.560304" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17841 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.635690" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.635982" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.559789" elapsed="0.076253"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.636181" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:55:14.636630" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.524200" elapsed="0.112542"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.637415" elapsed="0.001107"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.523075" elapsed="0.115651"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.520499" elapsed="0.118471"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.519723" elapsed="0.119353"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.518313" elapsed="0.120925"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.517635" elapsed="0.121711"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.640560" level="INFO">${next} = 17842</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.639705" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.642121" level="INFO">${current_port} = 17842</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.641043" elapsed="0.001188"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.512025" elapsed="0.130397"/>
</kw>
<msg time="2026-08-15T23:55:14.642519" level="INFO">Repeating keyword, round 13/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.645290" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.645022" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.644975" elapsed="0.000502"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.646305" level="INFO">${current_Date} = 2026-08-15 23:55:14.646</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.645847" elapsed="0.000486"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.646872" level="INFO">${ellapsed_seconds} = 2675.691</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.646496" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.647232" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.646974" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.646953" elapsed="0.000361"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.644429" elapsed="0.002932"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.647915" level="INFO">${number} = 13</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.647519" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.649530" level="INFO">${number} = 13</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.649126" elapsed="0.000445"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.651771" level="INFO">${device-port} = 17842</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.650929" elapsed="0.000950"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.654563" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.681063" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.681288" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.654461" elapsed="0.026886"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.682368" elapsed="0.000069"/>
</kw>
<msg time="2026-08-15T23:55:14.682529" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.653656" elapsed="0.029673"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.684191" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17842 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.752918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.753145" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.683676" elapsed="0.069524"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.753315" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:14.753740" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.653227" elapsed="0.100666"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.754541" elapsed="0.001053"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.652354" elapsed="0.103502"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.650382" elapsed="0.105689"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.649746" elapsed="0.106443"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.648625" elapsed="0.107690"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.648101" elapsed="0.108307"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.757679" level="INFO">${next} = 17843</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.756783" elapsed="0.000957"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.759242" level="INFO">${current_port} = 17843</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.758229" elapsed="0.001113"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.643050" elapsed="0.116425"/>
</kw>
<msg time="2026-08-15T23:55:14.759562" level="INFO">Repeating keyword, round 14/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.762398" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.762141" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.762094" elapsed="0.000448"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.763343" level="INFO">${current_Date} = 2026-08-15 23:55:14.763</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.762983" elapsed="0.000420"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.764471" level="INFO">${ellapsed_seconds} = 2675.574</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.763734" elapsed="0.000796"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.765258" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.764688" elapsed="0.000695"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.764647" elapsed="0.000797"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.761431" elapsed="0.004139"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.766598" level="INFO">${number} = 14</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.765937" elapsed="0.000689"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.768116" level="INFO">${number} = 14</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.767731" elapsed="0.000412"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.770186" level="INFO">${device-port} = 17843</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.769332" elapsed="0.000937"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.772880" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.808935" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.809178" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.772748" elapsed="0.036490"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.810330" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:14.810475" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.772041" elapsed="0.039369"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.812427" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17843 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:14.881338" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.881627" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.811789" elapsed="0.069910"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:14.881869" elapsed="0.000155"/>
</return>
<msg time="2026-08-15T23:55:14.882537" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.771586" elapsed="0.111118"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:14.883474" elapsed="0.001292"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.770740" elapsed="0.114303"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.768873" elapsed="0.116370"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.768307" elapsed="0.117046"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.767262" elapsed="0.118232"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.766785" elapsed="0.118937"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.887147" level="INFO">${next} = 17844</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.886185" elapsed="0.001025"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.888680" level="INFO">${current_port} = 17844</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:14.887591" elapsed="0.001189"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.760043" elapsed="0.129025"/>
</kw>
<msg time="2026-08-15T23:55:14.889173" level="INFO">Repeating keyword, round 15/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:14.891485" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:14.891317" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.891284" elapsed="0.000294"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.892067" level="INFO">${current_Date} = 2026-08-15 23:55:14.892</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:14.891793" elapsed="0.000325"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:14.892908" level="INFO">${ellapsed_seconds} = 2675.445</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:14.892400" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.893475" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:14.893049" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:14.893021" elapsed="0.000577"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:14.890880" elapsed="0.002783"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.894545" level="INFO">${number} = 15</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.893914" elapsed="0.000672"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.896887" level="INFO">${number} = 15</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.896244" elapsed="0.000683"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:14.900085" level="INFO">${device-port} = 17844</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:14.898843" elapsed="0.001358"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.903750" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:14.933145" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:14.933390" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.903635" elapsed="0.029816"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:14.934647" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:14.934835" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:14.902763" elapsed="0.033075"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:14.936887" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17844 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.015372" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.015639" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:14.936319" elapsed="0.079377"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.015868" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:55:15.016353" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:14.902294" elapsed="0.114199"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.017167" elapsed="0.001014"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:14.900996" elapsed="0.117381"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:14.898088" elapsed="0.120485"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:14.897161" elapsed="0.121536"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.895544" elapsed="0.123364"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:14.894834" elapsed="0.124178"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.020229" level="INFO">${next} = 17845</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.019387" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.021590" level="INFO">${current_port} = 17845</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.020661" elapsed="0.001022"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:14.889639" elapsed="0.132530"/>
</kw>
<msg time="2026-08-15T23:55:15.022493" level="INFO">Repeating keyword, round 16/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.025982" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.025604" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.025548" elapsed="0.000594"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.027207" level="INFO">${current_Date} = 2026-08-15 23:55:15.027</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.026735" elapsed="0.000538"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.028509" level="INFO">${ellapsed_seconds} = 2675.31</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.027617" elapsed="0.000972"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.029403" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.028762" elapsed="0.000765"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.028717" elapsed="0.000864"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.025026" elapsed="0.004660"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.030782" level="INFO">${number} = 16</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.030094" elapsed="0.000746"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.032906" level="INFO">${number} = 16</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.032383" elapsed="0.000561"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.035927" level="INFO">${device-port} = 17845</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.034729" elapsed="0.001322"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.040282" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.060926" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.061154" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.039683" elapsed="0.021531"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.062182" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:15.062321" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.038612" elapsed="0.024573"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.064074" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17845 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.128904" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.129132" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.063546" elapsed="0.065645"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.129308" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:15.129726" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.038022" elapsed="0.091902"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.130506" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.036687" elapsed="0.094925"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.034080" elapsed="0.097766"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.033172" elapsed="0.098784"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.031725" elapsed="0.100357"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.031076" elapsed="0.101106"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.133333" level="INFO">${next} = 17846</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.132531" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.134701" level="INFO">${current_port} = 17846</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.133758" elapsed="0.001039"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.023396" elapsed="0.111601"/>
</kw>
<msg time="2026-08-15T23:55:15.135086" level="INFO">Repeating keyword, round 17/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.137598" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.137354" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.137311" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.138423" level="INFO">${current_Date} = 2026-08-15 23:55:15.138</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.138159" elapsed="0.000302"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.139111" level="INFO">${ellapsed_seconds} = 2675.199</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.138667" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.139577" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.139248" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.139221" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.136785" elapsed="0.002964"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.140482" level="INFO">${number} = 17</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.139974" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.142527" level="INFO">${number} = 17</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.142053" elapsed="0.000513"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.145443" level="INFO">${device-port} = 17846</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.144311" elapsed="0.001248"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.151909" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.180923" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.181157" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.151339" elapsed="0.029879"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.182211" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:15.182350" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.149630" elapsed="0.033446"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.183941" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17846 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.249116" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.249367" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.183425" elapsed="0.065999"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.249545" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:15.250045" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.148558" elapsed="0.101602"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.250750" elapsed="0.000942"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.146686" elapsed="0.105232"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.143647" elapsed="0.108465"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.142912" elapsed="0.109301"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.141385" elapsed="0.110953"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.140736" elapsed="0.111698"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.253591" level="INFO">${next} = 17847</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.252783" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.255043" level="INFO">${current_port} = 17847</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.254130" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.135515" elapsed="0.119752"/>
</kw>
<msg time="2026-08-15T23:55:15.255353" level="INFO">Repeating keyword, round 18/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.258100" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.257843" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.257752" elapsed="0.000492"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.258616" level="INFO">${current_Date} = 2026-08-15 23:55:15.259</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.258447" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.259132" level="INFO">${ellapsed_seconds} = 2675.078</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.258793" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.259480" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.259232" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.259211" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.257122" elapsed="0.002483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.260136" level="INFO">${number} = 18</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.259751" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.261576" level="INFO">${number} = 18</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.261235" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.263615" level="INFO">${device-port} = 17847</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.262781" elapsed="0.000921"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.266420" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.301081" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.301306" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.266320" elapsed="0.035045"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.302320" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:15.302455" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.265440" elapsed="0.037750"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.304061" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17847 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.369868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.370329" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.303543" elapsed="0.066851"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.370614" elapsed="0.000155"/>
</return>
<msg time="2026-08-15T23:55:15.371293" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.265024" elapsed="0.106386"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.372219" elapsed="0.001171"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.264177" elapsed="0.109440"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.262329" elapsed="0.111581"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.261779" elapsed="0.112252"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.260773" elapsed="0.113403"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.260324" elapsed="0.113962"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.375580" level="INFO">${next} = 17848</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.374680" elapsed="0.000975"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.377119" level="INFO">${current_port} = 17848</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.376097" elapsed="0.001124"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.255793" elapsed="0.121572"/>
</kw>
<msg time="2026-08-15T23:55:15.377498" level="INFO">Repeating keyword, round 19/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.380049" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.379865" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.379824" elapsed="0.000321"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.380631" level="INFO">${current_Date} = 2026-08-15 23:55:15.380</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.380367" elapsed="0.000318"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.381493" level="INFO">${ellapsed_seconds} = 2674.957</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.380968" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.382070" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.381632" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.381604" elapsed="0.000582"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.379453" elapsed="0.002797"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.383037" level="INFO">${number} = 19</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.382458" elapsed="0.000625"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.385148" level="INFO">${number} = 19</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.384623" elapsed="0.000566"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.388131" level="INFO">${device-port} = 17848</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.386974" elapsed="0.001280"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.392906" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.420289" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.420627" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.391734" elapsed="0.028962"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.422082" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:55:15.422247" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.390775" elapsed="0.032396"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.424203" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17848 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.490716" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.490977" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.423588" elapsed="0.067427"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.491117" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:15.491445" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.390157" elapsed="0.101361"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.491962" elapsed="0.000698"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.388938" elapsed="0.103846"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.386286" elapsed="0.106731"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.385426" elapsed="0.107662"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.383979" elapsed="0.109195"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.383310" elapsed="0.109928"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.494100" level="INFO">${next} = 17849</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.493470" elapsed="0.000669"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.495019" level="INFO">${current_port} = 17849</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.494383" elapsed="0.000698"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.378210" elapsed="0.116957"/>
</kw>
<msg time="2026-08-15T23:55:15.495223" level="INFO">Repeating keyword, round 20/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.497043" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.496877" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.496824" elapsed="0.000311"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.497700" level="INFO">${current_Date} = 2026-08-15 23:55:15.498</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.497409" elapsed="0.000329"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.498512" level="INFO">${ellapsed_seconds} = 2674.839</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.498003" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.499037" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.498654" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.498623" elapsed="0.000495"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.496493" elapsed="0.002670"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.499684" level="INFO">${number} = 20</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.499311" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.501181" level="INFO">${number} = 20</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.500809" elapsed="0.000399"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.503263" level="INFO">${device-port} = 17849</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.502439" elapsed="0.000904"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.507418" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.544451" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.544750" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.507314" elapsed="0.037527"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.545960" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:15.546108" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.505025" elapsed="0.041889"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.547879" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17849 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.612858" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.613072" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.547300" elapsed="0.065826"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.613244" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:15.613701" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.504579" elapsed="0.109289"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.614467" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.503787" elapsed="0.111839"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.501985" elapsed="0.113862"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.501373" elapsed="0.114582"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.500345" elapsed="0.115739"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.499885" elapsed="0.116298"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.617346" level="INFO">${next} = 17850</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.616533" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.618770" level="INFO">${current_port} = 17850</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.617872" elapsed="0.001035"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.495559" elapsed="0.123483"/>
</kw>
<msg time="2026-08-15T23:55:15.619132" level="INFO">Repeating keyword, round 21/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.621901" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.621524" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.621477" elapsed="0.000572"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.622771" level="INFO">${current_Date} = 2026-08-15 23:55:15.623</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.622380" elapsed="0.000460"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.623368" level="INFO">${ellapsed_seconds} = 2674.714</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.623001" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.623733" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.623464" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.623445" elapsed="0.000383"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.620940" elapsed="0.002934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.624387" level="INFO">${number} = 21</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.624021" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.625861" level="INFO">${number} = 21</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.625485" elapsed="0.000403"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.627873" level="INFO">${device-port} = 17850</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.627077" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.630618" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.664865" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.665102" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.630520" elapsed="0.034642"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.666115" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:15.666253" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.629633" elapsed="0.037394"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.667917" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17850 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.732987" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.733222" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.667379" elapsed="0.065899"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.733395" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:15.733903" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.629203" elapsed="0.104819"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.734598" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.628400" elapsed="0.107338"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.626602" elapsed="0.109372"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.626049" elapsed="0.110025"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.625037" elapsed="0.111160"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.624569" elapsed="0.111723"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.737437" level="INFO">${next} = 17851</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.736640" elapsed="0.000912"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.738875" level="INFO">${current_port} = 17851</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.737988" elapsed="0.000949"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.619578" elapsed="0.119440"/>
</kw>
<msg time="2026-08-15T23:55:15.739072" level="INFO">Repeating keyword, round 22/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.740658" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.740497" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.740470" elapsed="0.000317"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.741325" level="INFO">${current_Date} = 2026-08-15 23:55:15.741</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.741090" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.742082" level="INFO">${ellapsed_seconds} = 2674.596</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.741591" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.742564" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.742218" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.742193" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.740165" elapsed="0.002573"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.743516" level="INFO">${number} = 22</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.742977" elapsed="0.000577"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.745589" level="INFO">${number} = 22</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.745084" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.748468" level="INFO">${device-port} = 17851</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.747313" elapsed="0.001272"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.755215" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.784733" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.784995" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.755114" elapsed="0.029941"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.786018" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:15.786160" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.750856" elapsed="0.036035"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.787727" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17851 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.853509" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.853834" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.787243" elapsed="0.066655"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.854037" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:15.854524" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.750384" elapsed="0.104252"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.855328" elapsed="0.001015"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.749244" elapsed="0.107293"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.746625" elapsed="0.110108"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.745879" elapsed="0.110992"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.744433" elapsed="0.112574"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.743776" elapsed="0.113335"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.858319" level="INFO">${next} = 17852</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.857499" elapsed="0.000881"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.859781" level="INFO">${current_port} = 17852</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.858866" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.739355" elapsed="0.120697"/>
</kw>
<msg time="2026-08-15T23:55:15.860142" level="INFO">Repeating keyword, round 23/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.862622" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.862459" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.862427" elapsed="0.000287"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.863211" level="INFO">${current_Date} = 2026-08-15 23:55:15.863</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.862962" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.863982" level="INFO">${ellapsed_seconds} = 2674.474</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.863457" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.864584" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.864117" elapsed="0.000552"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.864090" elapsed="0.000613"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.862110" elapsed="0.002659"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.865599" level="INFO">${number} = 23</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.865021" elapsed="0.000616"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.867787" level="INFO">${number} = 23</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.867263" elapsed="0.000593"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.870840" level="INFO">${device-port} = 17852</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.869664" elapsed="0.001293"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.874737" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:15.909088" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.909326" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.874635" elapsed="0.034755"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.910422" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:15.910556" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.873567" elapsed="0.037765"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.912189" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17852 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:15.981077" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:15.981294" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.911679" elapsed="0.069671"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:15.981500" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:15.981965" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.872876" elapsed="0.109206"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:15.982652" elapsed="0.000958"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.871650" elapsed="0.112192"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.868903" elapsed="0.115143"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.868089" elapsed="0.116059"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.866575" elapsed="0.117696"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.865899" elapsed="0.118465"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.985555" level="INFO">${next} = 17853</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.984711" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.987003" level="INFO">${current_port} = 17853</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:15.986055" elapsed="0.001048"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.860626" elapsed="0.126611"/>
</kw>
<msg time="2026-08-15T23:55:15.987322" level="INFO">Repeating keyword, round 24/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:15.989898" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:15.989694" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.989644" elapsed="0.000318"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.990307" level="INFO">${current_Date} = 2026-08-15 23:55:15.990</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:15.990144" elapsed="0.000189"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:15.990879" level="INFO">${ellapsed_seconds} = 2674.347</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:15.990483" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:15.991228" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:15.990983" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:15.990963" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:15.989072" elapsed="0.002294"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.991939" level="INFO">${number} = 24</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.991516" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.993417" level="INFO">${number} = 24</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.993046" elapsed="0.000398"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:15.995446" level="INFO">${device-port} = 17853</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:15.994618" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:15.998237" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.032779" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.033087" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:15.997964" elapsed="0.035225"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.034203" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:16.034342" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:15.997232" elapsed="0.037905"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.036076" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17853 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.105113" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.105363" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.035526" elapsed="0.069895"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.105542" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:16.106027" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:15.996808" elapsed="0.109329"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.106717" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:15.996001" elapsed="0.111889"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:15.994166" elapsed="0.113922"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:15.993608" elapsed="0.114582"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.992574" elapsed="0.115741"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:15.992123" elapsed="0.116289"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.109687" level="INFO">${next} = 17854</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.108764" elapsed="0.000994"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.111158" level="INFO">${current_port} = 17854</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.110208" elapsed="0.001048"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:15.987752" elapsed="0.123633"/>
</kw>
<msg time="2026-08-15T23:55:16.111471" level="INFO">Repeating keyword, round 25/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.114006" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.113845" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.113793" elapsed="0.000302"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.114535" level="INFO">${current_Date} = 2026-08-15 23:55:16.114</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.114306" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.115249" level="INFO">${ellapsed_seconds} = 2674.223</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.114778" elapsed="0.000524"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.115785" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.115431" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.115400" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.113262" elapsed="0.002722"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.116698" level="INFO">${number} = 25</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.116188" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.118734" level="INFO">${number} = 25</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.118263" elapsed="0.000509"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.121553" level="INFO">${device-port} = 17854</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.120415" elapsed="0.001248"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.125212" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.156741" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.157006" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.125068" elapsed="0.031998"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.158016" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:16.158152" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.124024" elapsed="0.034873"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.159751" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17854 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.224826" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.225062" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.159263" elapsed="0.065857"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.225238" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:55:16.225693" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.123420" elapsed="0.102431"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.226435" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.122309" elapsed="0.105275"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.119758" elapsed="0.108031"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.119019" elapsed="0.108933"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.117616" elapsed="0.110469"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.116974" elapsed="0.111218"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.229477" level="INFO">${next} = 17855</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.228555" elapsed="0.000988"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.230456" level="INFO">${current_port} = 17855</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.229907" elapsed="0.000610"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.111960" elapsed="0.118639"/>
</kw>
<msg time="2026-08-15T23:55:16.230655" level="INFO">Repeating keyword, round 26/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.232293" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.232133" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.232105" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.232894" level="INFO">${current_Date} = 2026-08-15 23:55:16.233</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.232643" elapsed="0.000290"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.233603" level="INFO">${ellapsed_seconds} = 2674.104</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.233144" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.234104" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.233741" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.233715" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.231767" elapsed="0.002515"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.235031" level="INFO">${number} = 26</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.234488" elapsed="0.000581"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.237118" level="INFO">${number} = 26</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.236594" elapsed="0.000562"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.239998" level="INFO">${device-port} = 17855</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.238853" elapsed="0.001259"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.243218" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.276518" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.276750" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.243113" elapsed="0.033739"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.277858" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:16.278001" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.242361" elapsed="0.036358"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.279604" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17855 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.344849" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.345081" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.279110" elapsed="0.066032"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.345295" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:16.345726" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.241932" elapsed="0.103950"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.346504" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.240725" elapsed="0.106908"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.238197" elapsed="0.109670"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.237403" elapsed="0.110572"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.235958" elapsed="0.112142"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.235289" elapsed="0.112908"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.349413" level="INFO">${next} = 17856</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.348543" elapsed="0.000930"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.350745" level="INFO">${current_port} = 17856</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.349882" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.230971" elapsed="0.120065"/>
</kw>
<msg time="2026-08-15T23:55:16.351122" level="INFO">Repeating keyword, round 27/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.353690" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.353437" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.353393" elapsed="0.000448"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.354164" level="INFO">${current_Date} = 2026-08-15 23:55:16.354</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.354001" elapsed="0.000191"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.354686" level="INFO">${ellapsed_seconds} = 2673.983</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.354340" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.355056" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.354785" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.354764" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.352849" elapsed="0.002335"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.355784" level="INFO">${number} = 27</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.355337" elapsed="0.000491"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.357328" level="INFO">${number} = 27</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.356952" elapsed="0.000403"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.359339" level="INFO">${device-port} = 17856</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.358528" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.362001" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.397048" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.397309" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.361900" elapsed="0.035471"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.398295" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:16.398430" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.361157" elapsed="0.038028"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.400045" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17856 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.469166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.469402" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.399531" elapsed="0.069927"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.469576" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:16.470070" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.360720" elapsed="0.109465"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.470758" elapsed="0.000947"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.359921" elapsed="0.112015"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.358077" elapsed="0.114053"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.357519" elapsed="0.114715"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.356465" elapsed="0.115898"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.355995" elapsed="0.116466"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.473687" level="INFO">${next} = 17857</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.472855" elapsed="0.000898"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.474592" level="INFO">${current_port} = 17857</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.474041" elapsed="0.000610"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.351547" elapsed="0.123187"/>
</kw>
<msg time="2026-08-15T23:55:16.474789" level="INFO">Repeating keyword, round 28/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.476476" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.476308" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.476278" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.477164" level="INFO">${current_Date} = 2026-08-15 23:55:16.477</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.476901" elapsed="0.000307"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.477926" level="INFO">${ellapsed_seconds} = 2673.86</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.477434" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.478420" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.478071" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.478044" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.475953" elapsed="0.002650"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.479367" level="INFO">${number} = 28</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.478834" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.481462" level="INFO">${number} = 28</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.480951" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.486419" level="INFO">${device-port} = 17857</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.484283" elapsed="0.002320"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.491581" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.520746" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.521011" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.491431" elapsed="0.029639"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.522048" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:16.522186" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.490333" elapsed="0.032584"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.523898" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17857 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.588984" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.589264" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.523360" elapsed="0.065963"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.589440" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:16.589940" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.489598" elapsed="0.100457"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.590635" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.487641" elapsed="0.104147"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.483222" elapsed="0.108815"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.481724" elapsed="0.110417"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.480296" elapsed="0.111969"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.479626" elapsed="0.112736"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.593550" level="INFO">${next} = 17858</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.592711" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.594962" level="INFO">${current_port} = 17858</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.594024" elapsed="0.001036"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.475102" elapsed="0.120091"/>
</kw>
<msg time="2026-08-15T23:55:16.595282" level="INFO">Repeating keyword, round 29/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.597936" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.597751" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.597700" elapsed="0.000301"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.598318" level="INFO">${current_Date} = 2026-08-15 23:55:16.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.598151" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.598840" level="INFO">${ellapsed_seconds} = 2673.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.598495" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.599191" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.598940" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.598920" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.597189" elapsed="0.002127"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.599848" level="INFO">${number} = 29</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.599464" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.601335" level="INFO">${number} = 29</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.600961" elapsed="0.000402"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.603371" level="INFO">${device-port} = 17858</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.602542" elapsed="0.000913"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.606264" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.640897" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.641140" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.605960" elapsed="0.035242"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.642110" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:16.642244" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.605248" elapsed="0.037755"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.643867" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17858 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.708569" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.708785" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.643353" elapsed="0.065526"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.708993" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:55:16.709427" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.604791" elapsed="0.104748"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.710149" elapsed="0.000892"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.603976" elapsed="0.107256"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.602083" elapsed="0.109336"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.601522" elapsed="0.109995"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.600490" elapsed="0.111150"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.600035" elapsed="0.111699"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.712913" level="INFO">${next} = 17859</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.712121" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.714254" level="INFO">${current_port} = 17859</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.713354" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.595715" elapsed="0.118764"/>
</kw>
<msg time="2026-08-15T23:55:16.714563" level="INFO">Repeating keyword, round 30/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.717167" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.716864" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.716790" elapsed="0.000520"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.718001" level="INFO">${current_Date} = 2026-08-15 23:55:16.718</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.717788" elapsed="0.000239"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.718488" level="INFO">${ellapsed_seconds} = 2673.619</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.718177" elapsed="0.000337"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.718843" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.718585" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.718567" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.716303" elapsed="0.002666"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.719480" level="INFO">${number} = 30</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.719115" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.720935" level="INFO">${number} = 30</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.720572" elapsed="0.000390"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.722943" level="INFO">${device-port} = 17859</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.722134" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.725717" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.760452" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.760679" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.725471" elapsed="0.035267"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.761720" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:55:16.761930" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.724770" elapsed="0.037917"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.763566" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17859 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.828846" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.829215" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.763080" elapsed="0.066214"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.829447" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:55:16.829899" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.724348" elapsed="0.105632"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.830437" elapsed="0.000755"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.723479" elapsed="0.107839"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.721655" elapsed="0.109818"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.721131" elapsed="0.110417"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.720125" elapsed="0.111527"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.719660" elapsed="0.112062"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.832507" level="INFO">${next} = 17860</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.831997" elapsed="0.000548"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.833396" level="INFO">${current_port} = 17860</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.832780" elapsed="0.000679"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.715045" elapsed="0.118497"/>
</kw>
<msg time="2026-08-15T23:55:16.833614" level="INFO">Repeating keyword, round 31/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.835461" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.835298" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.835267" elapsed="0.000283"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.836020" level="INFO">${current_Date} = 2026-08-15 23:55:16.836</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.835759" elapsed="0.000298"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.836787" level="INFO">${ellapsed_seconds} = 2673.501</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.836271" elapsed="0.000580"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.837320" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.836972" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.836926" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.834883" elapsed="0.002612"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.838256" level="INFO">${number} = 31</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.837708" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.840262" level="INFO">${number} = 31</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.839770" elapsed="0.000529"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.842790" level="INFO">${device-port} = 17860</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.842006" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.845510" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:16.881008" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.881302" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.845409" elapsed="0.035959"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.882545" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:16.882698" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.844545" elapsed="0.039012"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.884580" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17860 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:16.966318" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:16.966493" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.883982" elapsed="0.082547"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:16.966624" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:16.966976" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.844140" elapsed="0.122907"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:16.967434" elapsed="0.001066"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.843338" elapsed="0.125285"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.841383" elapsed="0.127369"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.840519" elapsed="0.128337"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.839151" elapsed="0.129845"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.838508" elapsed="0.130553"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.970227" level="INFO">${next} = 17861</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.969678" elapsed="0.000605"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.971660" level="INFO">${current_port} = 17861</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:16.970576" elapsed="0.001153"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.833950" elapsed="0.137925"/>
</kw>
<msg time="2026-08-15T23:55:16.971936" level="INFO">Repeating keyword, round 32/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:16.973873" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:16.973667" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.973635" elapsed="0.000511"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.975109" level="INFO">${current_Date} = 2026-08-15 23:55:16.975</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:16.974414" elapsed="0.000736"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:16.975907" level="INFO">${ellapsed_seconds} = 2673.362</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:16.975370" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:16.976409" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:16.976048" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:16.976021" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:16.973278" elapsed="0.003313"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.977363" level="INFO">${number} = 32</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.976819" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.979505" level="INFO">${number} = 32</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.979019" elapsed="0.000523"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:16.982343" level="INFO">${device-port} = 17861</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:16.981269" elapsed="0.001156"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:16.985773" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.020561" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.020892" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:16.985668" elapsed="0.035304"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.021989" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:55:17.022149" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:16.984734" elapsed="0.038204"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.023859" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17861 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.088319" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.088571" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.023317" elapsed="0.065314"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.088776" elapsed="0.000148"/>
</return>
<msg time="2026-08-15T23:55:17.089286" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:16.984275" elapsed="0.105120"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.090014" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:16.983447" elapsed="0.107689"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:16.980549" elapsed="0.110782"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:16.979771" elapsed="0.111662"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.978348" elapsed="0.113207"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:16.977665" elapsed="0.113984"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.092794" level="INFO">${next} = 17862</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.092039" elapsed="0.001021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.094109" level="INFO">${current_port} = 17862</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.093432" elapsed="0.000737"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:16.972244" elapsed="0.122005"/>
</kw>
<msg time="2026-08-15T23:55:17.094303" level="INFO">Repeating keyword, round 33/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.095918" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.095735" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.095709" elapsed="0.000298"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.096434" level="INFO">${current_Date} = 2026-08-15 23:55:17.096</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.096212" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.097221" level="INFO">${ellapsed_seconds} = 2673.241</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.096676" elapsed="0.000583"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.097707" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.097361" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.097332" elapsed="0.000541"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.095402" elapsed="0.002548"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.098671" level="INFO">${number} = 33</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.098159" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.100846" level="INFO">${number} = 33</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.100320" elapsed="0.000566"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.103629" level="INFO">${device-port} = 17862</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.102513" elapsed="0.001229"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.107199" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.141035" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.141482" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.107101" elapsed="0.034462"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.142960" elapsed="0.000070"/>
</kw>
<msg time="2026-08-15T23:55:17.143117" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.106243" elapsed="0.037855"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.145272" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17862 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.209571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.209796" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.144598" elapsed="0.065257"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.209960" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:17.210386" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.105783" elapsed="0.104676"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.210937" elapsed="0.000657"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.104390" elapsed="0.107335"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.101865" elapsed="0.110016"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.101106" elapsed="0.110848"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.099618" elapsed="0.112431"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.098973" elapsed="0.113139"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.212898" level="INFO">${next} = 17863</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.212335" elapsed="0.000603"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.213755" level="INFO">${current_port} = 17863</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.213180" elapsed="0.000665"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.094578" elapsed="0.119354"/>
</kw>
<msg time="2026-08-15T23:55:17.213990" level="INFO">Repeating keyword, round 34/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.215792" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.215619" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.215588" elapsed="0.000327"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.216439" level="INFO">${current_Date} = 2026-08-15 23:55:17.216</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.216191" elapsed="0.000285"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.217257" level="INFO">${ellapsed_seconds} = 2673.121</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.216684" elapsed="0.000614"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.217771" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.217414" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.217375" elapsed="0.000559"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.215253" elapsed="0.002746"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.218727" level="INFO">${number} = 34</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.218207" elapsed="0.000558"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.220885" level="INFO">${number} = 34</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.220306" elapsed="0.000620"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.223839" level="INFO">${device-port} = 17863</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.222613" elapsed="0.001355"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.231613" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.261201" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.261655" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.231461" elapsed="0.030264"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.263223" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:55:17.263387" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.226496" elapsed="0.037770"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.265340" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17863 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.333293" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.333718" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.264702" elapsed="0.069136"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.334056" elapsed="0.000135"/>
</return>
<msg time="2026-08-15T23:55:17.334700" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.225851" elapsed="0.109084"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.335643" elapsed="0.001262"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.224598" elapsed="0.112548"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.221958" elapsed="0.115413"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.221154" elapsed="0.116347"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.219644" elapsed="0.118008"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.219010" elapsed="0.118749"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.339206" level="INFO">${next} = 17864</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.338179" elapsed="0.001100"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.341106" level="INFO">${current_port} = 17864</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.339751" elapsed="0.001472"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.214354" elapsed="0.127013"/>
</kw>
<msg time="2026-08-15T23:55:17.341462" level="INFO">Repeating keyword, round 35/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.343695" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.343516" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.343480" elapsed="0.000314"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.344329" level="INFO">${current_Date} = 2026-08-15 23:55:17.344</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.344070" elapsed="0.000297"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.345167" level="INFO">${ellapsed_seconds} = 2672.993</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.344580" elapsed="0.000625"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.345679" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.345305" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.345277" elapsed="0.000563"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.343099" elapsed="0.002805"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.346425" level="INFO">${number} = 35</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.346055" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.347996" level="INFO">${number} = 35</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.347542" elapsed="0.000481"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.350176" level="INFO">${device-port} = 17864</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.349357" elapsed="0.000901"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.353103" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.384998" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.385192" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.352732" elapsed="0.032501"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.385961" elapsed="0.000042"/>
</kw>
<msg time="2026-08-15T23:55:17.386060" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.352024" elapsed="0.034833"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.387448" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17864 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.460009" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.460458" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.387106" elapsed="0.073414"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.460774" elapsed="0.000176"/>
</return>
<msg time="2026-08-15T23:55:17.461401" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.351570" elapsed="0.109948"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.462383" elapsed="0.000862"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.350725" elapsed="0.112800"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.348898" elapsed="0.114797"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.348189" elapsed="0.115633"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.347088" elapsed="0.116847"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.346608" elapsed="0.117394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.464925" level="INFO">${next} = 17865</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.464283" elapsed="0.000682"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.466066" level="INFO">${current_port} = 17865</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.465308" elapsed="0.000821"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.342008" elapsed="0.124237"/>
</kw>
<msg time="2026-08-15T23:55:17.466381" level="INFO">Repeating keyword, round 36/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.468584" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.468395" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.468362" elapsed="0.000368"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.469297" level="INFO">${current_Date} = 2026-08-15 23:55:17.469</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.469041" elapsed="0.000294"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.470046" level="INFO">${ellapsed_seconds} = 2672.868</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.469547" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.470561" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.470182" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.470157" elapsed="0.000569"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.467756" elapsed="0.003035"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.472078" level="INFO">${number} = 36</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.471080" elapsed="0.001036"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.474590" level="INFO">${number} = 36</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.474167" elapsed="0.000451"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.477031" level="INFO">${device-port} = 17865</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.475982" elapsed="0.001132"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.479730" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.513383" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.513847" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.479625" elapsed="0.034294"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.516113" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:55:17.516314" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.478900" elapsed="0.038487"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.518229" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17865 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.584978" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.585208" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.517840" elapsed="0.067424"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.585389" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:55:17.585908" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.478442" elapsed="0.107584"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.586601" elapsed="0.001052"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.477602" elapsed="0.110300"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.475415" elapsed="0.112692"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.474859" elapsed="0.113356"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.473335" elapsed="0.115011"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.472492" elapsed="0.115954"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.589698" level="INFO">${next} = 17866</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.588880" elapsed="0.000879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.591141" level="INFO">${current_port} = 17866</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.590185" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.466763" elapsed="0.124612"/>
</kw>
<msg time="2026-08-15T23:55:17.591465" level="INFO">Repeating keyword, round 37/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.594217" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.594096" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.594071" elapsed="0.000237"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.594688" level="INFO">${current_Date} = 2026-08-15 23:55:17.595</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.594493" elapsed="0.000223"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.595317" level="INFO">${ellapsed_seconds} = 2672.742</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.594914" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.595743" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.595447" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.595426" elapsed="0.000431"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.593649" elapsed="0.002256"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.596487" level="INFO">${number} = 37</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.596072" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.598059" level="INFO">${number} = 37</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.597663" elapsed="0.000424"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.600352" level="INFO">${device-port} = 17866</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.599498" elapsed="0.000943"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.603085" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.636405" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.636608" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.602971" elapsed="0.033678"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.637298" elapsed="0.000038"/>
</kw>
<msg time="2026-08-15T23:55:17.637386" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.602222" elapsed="0.035714"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.638475" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17866 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.704930" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.705200" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.638161" elapsed="0.067104"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.705387" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:17.705889" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.601771" elapsed="0.104242"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.706596" elapsed="0.001001"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.600938" elapsed="0.106892"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.599021" elapsed="0.109049"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.598252" elapsed="0.109921"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.597193" elapsed="0.111107"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.596697" elapsed="0.111700"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.710102" level="INFO">${next} = 17867</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.709429" elapsed="0.000712"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.710985" level="INFO">${current_port} = 17867</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.710380" elapsed="0.000669"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.591963" elapsed="0.119171"/>
</kw>
<msg time="2026-08-15T23:55:17.711189" level="INFO">Repeating keyword, round 38/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.712883" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.712681" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.712654" elapsed="0.000322"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.713478" level="INFO">${current_Date} = 2026-08-15 23:55:17.713</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.713237" elapsed="0.000279"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.714218" level="INFO">${ellapsed_seconds} = 2672.624</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.713734" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.714715" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.714357" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.714331" elapsed="0.000517"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.712318" elapsed="0.002597"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.715645" level="INFO">${number} = 38</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.715121" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.717731" level="INFO">${number} = 38</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.717244" elapsed="0.000525"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.720744" level="INFO">${device-port} = 17867</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.719516" elapsed="0.001374"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.723792" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.756939" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.757193" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.723670" elapsed="0.033584"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.758250" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:17.758393" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.722977" elapsed="0.036256"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.760138" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17867 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.825027" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.825508" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.759595" elapsed="0.065979"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.825765" elapsed="0.000179"/>
</return>
<msg time="2026-08-15T23:55:17.826462" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.722520" elapsed="0.104087"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.827403" elapsed="0.001138"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.721537" elapsed="0.107228"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.718846" elapsed="0.110184"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.718020" elapsed="0.111116"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.716588" elapsed="0.112681"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.715925" elapsed="0.113446"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.830780" level="INFO">${next} = 17868</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.829728" elapsed="0.001190"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.832250" level="INFO">${current_port} = 17868</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.831308" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.711472" elapsed="0.121060"/>
</kw>
<msg time="2026-08-15T23:55:17.832628" level="INFO">Repeating keyword, round 39/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.834599" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.834421" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.834385" elapsed="0.000312"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.835207" level="INFO">${current_Date} = 2026-08-15 23:55:17.835</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.834945" elapsed="0.000304"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.835995" level="INFO">${ellapsed_seconds} = 2672.502</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.835471" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.836554" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.836138" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.836111" elapsed="0.000565"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.834046" elapsed="0.002698"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.837533" level="INFO">${number} = 39</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.836988" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.839736" level="INFO">${number} = 39</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.839149" elapsed="0.000625"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.842869" level="INFO">${device-port} = 17868</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.841674" elapsed="0.001315"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.846300" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:17.880914" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.881091" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.846188" elapsed="0.034946"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.881725" elapsed="0.000037"/>
</kw>
<msg time="2026-08-15T23:55:17.881848" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.845461" elapsed="0.036956"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.883023" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17868 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:17.948526" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:17.948771" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.882657" elapsed="0.066200"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:17.948987" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:55:17.949535" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.844960" elapsed="0.104719"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:17.950374" elapsed="0.001032"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.843645" elapsed="0.107973"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.840950" elapsed="0.110921"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.840028" elapsed="0.111964"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.838505" elapsed="0.113657"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.837853" elapsed="0.114418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.953275" level="INFO">${next} = 17869</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.952724" elapsed="0.000589"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.954208" level="INFO">${current_port} = 17869</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:17.953584" elapsed="0.000684"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.833059" elapsed="0.121295"/>
</kw>
<msg time="2026-08-15T23:55:17.954410" level="INFO">Repeating keyword, round 40/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:17.956152" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:17.955992" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.955964" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.956841" level="INFO">${current_Date} = 2026-08-15 23:55:17.957</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:17.956569" elapsed="0.000311"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:17.957666" level="INFO">${ellapsed_seconds} = 2672.38</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:17.957132" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:17.958283" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:17.957862" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:17.957832" elapsed="0.000583"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:17.955626" elapsed="0.002855"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.959437" level="INFO">${number} = 40</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.958829" elapsed="0.000647"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.961592" level="INFO">${number} = 40</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.961102" elapsed="0.000528"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:17.964761" level="INFO">${device-port} = 17869</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:17.963348" elapsed="0.001585"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:17.967555" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.000310" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.001462" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:17.967449" elapsed="0.034081"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.002708" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:18.002907" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:17.966720" elapsed="0.036966"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.004674" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17869 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.068998" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.069253" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.004130" elapsed="0.065162"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.069407" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:18.069832" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:17.966237" elapsed="0.103686"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.070373" elapsed="0.000984"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:17.965398" elapsed="0.106161"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:17.962631" elapsed="0.109127"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:17.961877" elapsed="0.110024"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.960369" elapsed="0.111664"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:17.959699" elapsed="0.112437"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.073379" level="INFO">${next} = 17870</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.072526" elapsed="0.000913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.074735" level="INFO">${current_port} = 17870</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.073844" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:17.954725" elapsed="0.120300"/>
</kw>
<msg time="2026-08-15T23:55:18.075129" level="INFO">Repeating keyword, round 41/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.077587" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.077421" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.077390" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.078167" level="INFO">${current_Date} = 2026-08-15 23:55:18.078</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.077917" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.078919" level="INFO">${ellapsed_seconds} = 2672.259</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.078412" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.079414" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.079054" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.079027" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.077073" elapsed="0.002515"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.080460" level="INFO">${number} = 41</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.079791" elapsed="0.000710"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.082589" level="INFO">${number} = 41</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.082105" elapsed="0.000522"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.085487" level="INFO">${device-port} = 17870</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.084305" elapsed="0.001296"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.089273" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.124889" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.125297" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.089001" elapsed="0.036363"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.126662" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:18.126847" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.087992" elapsed="0.039908"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.128957" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17870 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.196698" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.196977" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.128350" elapsed="0.068686"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.197174" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:55:18.197665" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.087367" elapsed="0.110413"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.198419" elapsed="0.001055"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.086244" elapsed="0.113430"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.083613" elapsed="0.116297"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.082870" elapsed="0.117152"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.081417" elapsed="0.118738"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.080725" elapsed="0.119531"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.201523" level="INFO">${next} = 17871</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.200674" elapsed="0.000912"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.203020" level="INFO">${current_port} = 17871</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.201996" elapsed="0.001133"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.075654" elapsed="0.127614"/>
</kw>
<msg time="2026-08-15T23:55:18.203359" level="INFO">Repeating keyword, round 42/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.206121" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.205862" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.205788" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.207118" level="INFO">${current_Date} = 2026-08-15 23:55:18.207</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.206675" elapsed="0.000505"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.208522" level="INFO">${ellapsed_seconds} = 2672.13</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.207665" elapsed="0.000918"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.209108" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.208758" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.208709" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.205294" elapsed="0.003944"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.209851" level="INFO">${number} = 42</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.209416" elapsed="0.000464"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.211329" level="INFO">${number} = 42</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.210974" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.213413" level="INFO">${device-port} = 17871</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.212572" elapsed="0.000936"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.216316" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.248553" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.248849" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.216026" elapsed="0.032887"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.249906" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:18.250051" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.215306" elapsed="0.035483"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.251691" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17871 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.317365" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.317590" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.251190" elapsed="0.066456"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.317764" elapsed="0.000126"/>
</return>
<msg time="2026-08-15T23:55:18.318330" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.214815" elapsed="0.103635"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.319119" elapsed="0.001031"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.213992" elapsed="0.106421"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.212096" elapsed="0.108519"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.211520" elapsed="0.109206"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.210502" elapsed="0.110429"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.210042" elapsed="0.110995"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.322536" level="INFO">${next} = 17872</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.321495" elapsed="0.001106"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.324046" level="INFO">${current_port} = 17872</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.323031" elapsed="0.001118"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.203883" elapsed="0.120449"/>
</kw>
<msg time="2026-08-15T23:55:18.324429" level="INFO">Repeating keyword, round 43/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.327040" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.326760" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.326719" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.327915" level="INFO">${current_Date} = 2026-08-15 23:55:18.328</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.327514" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.329013" level="INFO">${ellapsed_seconds} = 2672.009</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.328353" elapsed="0.000697"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.329509" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.329149" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.329122" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.326228" elapsed="0.003458"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.330431" level="INFO">${number} = 43</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.329918" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.332561" level="INFO">${number} = 43</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.332005" elapsed="0.000594"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.334673" level="INFO">${device-port} = 17872</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.333896" elapsed="0.000858"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.337442" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.372942" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.373184" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.337342" elapsed="0.035905"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.374220" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:18.374363" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.336464" elapsed="0.038680"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.376054" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17872 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.445123" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.445350" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.375523" elapsed="0.069886"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.445522" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:18.445986" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.336033" elapsed="0.110069"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.446686" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.335221" elapsed="0.112645"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.333420" elapsed="0.114651"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.332868" elapsed="0.115345"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.331340" elapsed="0.117013"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.330689" elapsed="0.117786"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.449650" level="INFO">${next} = 17873</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.448867" elapsed="0.000844"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.451086" level="INFO">${current_port} = 17873</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.450129" elapsed="0.001056"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.324910" elapsed="0.126408"/>
</kw>
<msg time="2026-08-15T23:55:18.451405" level="INFO">Repeating keyword, round 44/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.454104" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.453844" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.453762" elapsed="0.000486"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.455075" level="INFO">${current_Date} = 2026-08-15 23:55:18.455</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.454673" elapsed="0.000480"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.456312" level="INFO">${ellapsed_seconds} = 2671.882</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.455497" elapsed="0.000877"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.457016" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.456537" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.456493" elapsed="0.000605"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.453245" elapsed="0.003899"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.457668" level="INFO">${number} = 44</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.457293" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.459162" level="INFO">${number} = 44</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.458811" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.461616" level="INFO">${device-port} = 17873</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.460481" elapsed="0.001239"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.464653" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.496513" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.496736" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.464554" elapsed="0.032241"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.497709" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:18.497875" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.463677" elapsed="0.034903"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.499455" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17873 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.564451" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.564689" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.498969" elapsed="0.065775"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.564912" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:55:18.565365" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.463163" elapsed="0.102314"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.566121" elapsed="0.000953"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.462232" elapsed="0.105060"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.459910" elapsed="0.107645"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.459350" elapsed="0.108310"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.458335" elapsed="0.109452"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.457881" elapsed="0.110053"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.569207" level="INFO">${next} = 17874</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.568356" elapsed="0.000922"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.570611" level="INFO">${current_port} = 17874</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.569655" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.451897" elapsed="0.119018"/>
</kw>
<msg time="2026-08-15T23:55:18.571006" level="INFO">Repeating keyword, round 45/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.573458" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.573284" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.573254" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.574076" level="INFO">${current_Date} = 2026-08-15 23:55:18.574</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.573761" elapsed="0.000354"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.574797" level="INFO">${ellapsed_seconds} = 2671.763</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.574327" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.575308" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.574960" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.574933" elapsed="0.000498"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.572934" elapsed="0.002561"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.576259" level="INFO">${number} = 45</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.575700" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.578346" level="INFO">${number} = 45</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.577858" elapsed="0.000526"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.581268" level="INFO">${device-port} = 17874</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.580073" elapsed="0.001310"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.585331" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.616770" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.617030" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.585230" elapsed="0.031866"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.618062" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:18.618218" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.583963" elapsed="0.035038"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.619899" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17874 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.688921" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.689188" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.619373" elapsed="0.069893"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.689396" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:55:18.689906" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.583303" elapsed="0.106723"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.690652" elapsed="0.000987"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.582050" elapsed="0.109834"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.579383" elapsed="0.112772"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.578618" elapsed="0.113653"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.577194" elapsed="0.115222"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.576538" elapsed="0.115980"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.693354" level="INFO">${next} = 17875</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.692850" elapsed="0.000546"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.694402" level="INFO">${current_port} = 17875</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.693831" elapsed="0.000636"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.571494" elapsed="0.123058"/>
</kw>
<msg time="2026-08-15T23:55:18.694609" level="INFO">Repeating keyword, round 46/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.696413" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.696231" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.696201" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.697061" level="INFO">${current_Date} = 2026-08-15 23:55:18.697</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.696789" elapsed="0.000310"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.697780" level="INFO">${ellapsed_seconds} = 2671.64</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.697313" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.698294" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.697946" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.697919" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.695854" elapsed="0.002631"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.699265" level="INFO">${number} = 46</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.698693" elapsed="0.000610"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.701400" level="INFO">${number} = 46</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.700908" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.704432" level="INFO">${device-port} = 17875</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.703158" elapsed="0.001400"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.710330" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.740848" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.741072" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.710226" elapsed="0.030914"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.742073" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:18.742211" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.706387" elapsed="0.036555"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.743786" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17875 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.808658" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.808907" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.743305" elapsed="0.065661"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.809077" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:18.809482" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.705960" elapsed="0.103633"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.810232" elapsed="0.001087"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.705111" elapsed="0.106399"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.702463" elapsed="0.109239"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.701679" elapsed="0.110162"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.700230" elapsed="0.111769"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.699552" elapsed="0.112548"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.813238" level="INFO">${next} = 17876</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.812448" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.814554" level="INFO">${current_port} = 17876</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.813654" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.694978" elapsed="0.119799"/>
</kw>
<msg time="2026-08-15T23:55:18.814924" level="INFO">Repeating keyword, round 47/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.817427" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.817186" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.817143" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.818271" level="INFO">${current_Date} = 2026-08-15 23:55:18.818</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.817922" elapsed="0.000408"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.819370" level="INFO">${ellapsed_seconds} = 2671.519</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.818658" elapsed="0.000769"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.820214" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.819585" elapsed="0.000756"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.819543" elapsed="0.000852"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.816624" elapsed="0.003872"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.821258" level="INFO">${number} = 47</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.820869" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.822691" level="INFO">${number} = 47</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.822351" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.824717" level="INFO">${device-port} = 17876</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.823898" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.827423" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.856371" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.856595" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.827161" elapsed="0.029492"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.857583" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:18.857723" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.826474" elapsed="0.032041"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.859426" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17876 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:18.925114" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.925372" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.858915" elapsed="0.066517"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:18.925562" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:18.926147" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.826064" elapsed="0.100220"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:18.926958" elapsed="0.001202"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.825262" elapsed="0.103126"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.823424" elapsed="0.105167"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.822895" elapsed="0.105802"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.821906" elapsed="0.106967"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.821439" elapsed="0.107539"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.930358" level="INFO">${next} = 17877</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.929414" elapsed="0.001011"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.931913" level="INFO">${current_port} = 17877</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:18.930850" elapsed="0.001187"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.815348" elapsed="0.116864"/>
</kw>
<msg time="2026-08-15T23:55:18.932355" level="INFO">Repeating keyword, round 48/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:18.935449" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:18.935123" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.935076" elapsed="0.000524"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.936568" level="INFO">${current_Date} = 2026-08-15 23:55:18.936</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:18.936111" elapsed="0.000520"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:18.938174" level="INFO">${ellapsed_seconds} = 2671.401</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:18.937793" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.938585" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:18.938274" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:18.938255" elapsed="0.000417"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:18.934513" elapsed="0.004206"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.939264" level="INFO">${number} = 48</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.938887" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.940859" level="INFO">${number} = 48</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.940478" elapsed="0.000410"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:18.943016" level="INFO">${device-port} = 17877</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:18.942130" elapsed="0.000968"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.945827" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:18.976433" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:18.976684" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.945691" elapsed="0.031060"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:18.977757" elapsed="0.000092"/>
</kw>
<msg time="2026-08-15T23:55:18.977934" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:18.944951" elapsed="0.033726"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:18.979573" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17877 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.044488" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.044734" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:18.979079" elapsed="0.065713"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.044956" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:19.045429" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:18.944459" elapsed="0.101141"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.046272" elapsed="0.001042"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:18.943593" elapsed="0.103924"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:18.941642" elapsed="0.106140"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:18.941052" elapsed="0.106955"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.939994" elapsed="0.108144"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:18.939487" elapsed="0.108752"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.049446" level="INFO">${next} = 17878</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.048595" elapsed="0.000912"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.050900" level="INFO">${current_port} = 17878</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.049941" elapsed="0.001063"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:18.932873" elapsed="0.118264"/>
</kw>
<msg time="2026-08-15T23:55:19.051227" level="INFO">Repeating keyword, round 49/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.053478" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.053319" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.053290" elapsed="0.000280"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.054049" level="INFO">${current_Date} = 2026-08-15 23:55:19.054</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.053781" elapsed="0.000306"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.054755" level="INFO">${ellapsed_seconds} = 2671.283</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.054297" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.055292" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.054936" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.054906" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.052973" elapsed="0.002497"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.056438" level="INFO">${number} = 49</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.055677" elapsed="0.000829"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.058561" level="INFO">${number} = 49</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.058075" elapsed="0.000524"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.061603" level="INFO">${device-port} = 17878</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.060324" elapsed="0.001398"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.065301" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.096347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.096590" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.065192" elapsed="0.031462"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.097704" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:55:19.097895" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.064259" elapsed="0.034437"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.099584" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17878 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.164388" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.164619" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.099090" elapsed="0.065587"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.164790" elapsed="0.000117"/>
</return>
<msg time="2026-08-15T23:55:19.165253" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.063583" elapsed="0.101783"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.166007" elapsed="0.000937"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.062416" elapsed="0.104727"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.059624" elapsed="0.107713"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.058858" elapsed="0.108582"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.057408" elapsed="0.110175"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.056731" elapsed="0.110955"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.168949" level="INFO">${next} = 17879</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.168116" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.170312" level="INFO">${current_port} = 17879</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.169374" elapsed="0.001034"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.051663" elapsed="0.118873"/>
</kw>
<msg time="2026-08-15T23:55:19.170627" level="INFO">Repeating keyword, round 50/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.173124" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.172960" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.172932" elapsed="0.000283"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.173707" level="INFO">${current_Date} = 2026-08-15 23:55:19.174</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.173468" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.174459" level="INFO">${ellapsed_seconds} = 2671.163</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.173992" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.174995" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.174595" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.174569" elapsed="0.000543"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.172483" elapsed="0.002694"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.175953" level="INFO">${number} = 50</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.175385" elapsed="0.000607"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.178035" level="INFO">${number} = 50</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.177519" elapsed="0.000554"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.180946" level="INFO">${device-port} = 17879</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.179724" elapsed="0.001305"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.183485" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.215901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.216003" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.183388" elapsed="0.032641"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.216421" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:55:19.216481" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.182693" elapsed="0.034177"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.217711" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17879 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.284348" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.284564" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.217230" elapsed="0.067389"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.284730" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:55:19.285208" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.182282" elapsed="0.103040"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.286126" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.181472" elapsed="0.105743"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.179085" elapsed="0.108319"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.178296" elapsed="0.109211"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.176884" elapsed="0.110750"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.176213" elapsed="0.111519"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.288957" level="INFO">${next} = 17880</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.288156" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.290280" level="INFO">${current_port} = 17880</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.289381" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.171125" elapsed="0.119387"/>
</kw>
<msg time="2026-08-15T23:55:19.290598" level="INFO">Repeating keyword, round 51/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.293011" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.292901" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.292880" elapsed="0.000196"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.293387" level="INFO">${current_Date} = 2026-08-15 23:55:19.293</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.293229" elapsed="0.000185"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.293897" level="INFO">${ellapsed_seconds} = 2671.044</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.293563" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.294235" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.293996" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.293976" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.292476" elapsed="0.001893"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.294910" level="INFO">${number} = 51</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.294516" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.296370" level="INFO">${number} = 51</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.296027" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.298366" level="INFO">${device-port} = 17880</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.297556" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.300979" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.336657" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.336949" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.300878" elapsed="0.036130"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.337933" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:19.338072" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.300184" elapsed="0.038643"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.339668" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17880 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.404282" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.404500" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.339186" elapsed="0.065369"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.404668" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:19.405139" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.299747" elapsed="0.105502"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.405874" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.298948" elapsed="0.108050"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.297104" elapsed="0.110083"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.296560" elapsed="0.110729"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.295541" elapsed="0.111872"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.295095" elapsed="0.112415"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.408682" level="INFO">${next} = 17881</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.407923" elapsed="0.000819"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.410068" level="INFO">${current_port} = 17881</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.409164" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.291081" elapsed="0.119213"/>
</kw>
<msg time="2026-08-15T23:55:19.410381" level="INFO">Repeating keyword, round 52/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.413079" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.412828" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.412759" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.414014" level="INFO">${current_Date} = 2026-08-15 23:55:19.414</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.413624" elapsed="0.000450"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.415139" level="INFO">${ellapsed_seconds} = 2670.923</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.414416" elapsed="0.000782"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.415962" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.415356" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.415315" elapsed="0.000830"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.412270" elapsed="0.003979"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.417151" level="INFO">${number} = 52</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.416581" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.418598" level="INFO">${number} = 52</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.418250" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.420596" level="INFO">${device-port} = 17881</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.419795" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.423164" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.476835" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.477307" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.423066" elapsed="0.054308"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.478879" elapsed="0.000080"/>
</kw>
<msg time="2026-08-15T23:55:19.479058" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.422361" elapsed="0.057697"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.481138" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17881 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.544681" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.544966" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.480521" elapsed="0.064506"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.545172" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:55:19.545691" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.421946" elapsed="0.123920"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.546539" elapsed="0.001178"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.421137" elapsed="0.126879"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.419327" elapsed="0.128906"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.418782" elapsed="0.129582"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.417786" elapsed="0.130716"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.417333" elapsed="0.131290"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.549511" level="INFO">${next} = 17882</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.548975" elapsed="0.000574"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.550418" level="INFO">${current_port} = 17882</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.549793" elapsed="0.000686"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.410855" elapsed="0.139711"/>
</kw>
<msg time="2026-08-15T23:55:19.550626" level="INFO">Repeating keyword, round 53/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.552452" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.552287" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.552256" elapsed="0.000289"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.553078" level="INFO">${current_Date} = 2026-08-15 23:55:19.553</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.552771" elapsed="0.000348"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.553842" level="INFO">${ellapsed_seconds} = 2670.784</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.553336" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.554351" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.553983" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.553956" elapsed="0.000510"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.551938" elapsed="0.002594"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.555330" level="INFO">${number} = 53</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.554766" elapsed="0.000603"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.557522" level="INFO">${number} = 53</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.557008" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.560491" level="INFO">${device-port} = 17882</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.559250" elapsed="0.001357"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.563399" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.600525" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.600752" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.563134" elapsed="0.037716"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.601737" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:19.601907" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.562420" elapsed="0.040231"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.603515" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17882 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.672396" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.672609" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.603031" elapsed="0.069633"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.672774" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:55:19.673220" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.562002" elapsed="0.111327"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.673927" elapsed="0.000843"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.561185" elapsed="0.113811"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.558576" elapsed="0.116606"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.557788" elapsed="0.117494"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.556315" elapsed="0.119090"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.555602" elapsed="0.119897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.676673" level="INFO">${next} = 17883</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.675923" elapsed="0.000810"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.678037" level="INFO">${current_port} = 17883</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.677145" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.550980" elapsed="0.127283"/>
</kw>
<msg time="2026-08-15T23:55:19.678349" level="INFO">Repeating keyword, round 54/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.681150" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.680986" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.680955" elapsed="0.000287"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.681767" level="INFO">${current_Date} = 2026-08-15 23:55:19.682</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.681524" elapsed="0.000301"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.682497" level="INFO">${ellapsed_seconds} = 2670.655</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.682038" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.683013" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.682632" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.682606" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.680400" elapsed="0.002790"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.683966" level="INFO">${number} = 54</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.683396" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.686006" level="INFO">${number} = 54</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.685505" elapsed="0.000539"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.688709" level="INFO">${device-port} = 17883</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.687910" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.691486" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.724608" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.724884" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.691207" elapsed="0.033741"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.725879" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:19.726021" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.690502" elapsed="0.036217"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.727657" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17883 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.792528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.792760" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.727110" elapsed="0.065742"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.793020" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:19.793519" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.690085" elapsed="0.103560"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.794281" elapsed="0.000928"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.689270" elapsed="0.106129"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.687179" elapsed="0.108500"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.686269" elapsed="0.109505"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.684881" elapsed="0.111005"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.684225" elapsed="0.111723"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.796654" level="INFO">${next} = 17884</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.796168" elapsed="0.000523"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.797517" level="INFO">${current_port} = 17884</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.796951" elapsed="0.000635"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.678769" elapsed="0.118906"/>
</kw>
<msg time="2026-08-15T23:55:19.797737" level="INFO">Repeating keyword, round 55/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.799508" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.799338" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.799310" elapsed="0.000290"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.800050" level="INFO">${current_Date} = 2026-08-15 23:55:19.800</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.799826" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.800756" level="INFO">${ellapsed_seconds} = 2670.537</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.800296" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.801266" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.800918" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.800890" elapsed="0.000485"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.798997" elapsed="0.002443"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.802179" level="INFO">${number} = 55</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.801644" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.804217" level="INFO">${number} = 55</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.803720" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.807033" level="INFO">${device-port} = 17884</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.805905" elapsed="0.001242"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.810291" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.844648" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.844909" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.810190" elapsed="0.034780"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.845877" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:19.846014" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.809298" elapsed="0.037447"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.847667" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17884 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:19.912326" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.912598" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.847123" elapsed="0.065533"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:19.912790" elapsed="0.000141"/>
</return>
<msg time="2026-08-15T23:55:19.913312" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.808883" elapsed="0.104544"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:19.914083" elapsed="0.000976"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.807844" elapsed="0.107409"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.805237" elapsed="0.110240"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.804476" elapsed="0.111108"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.803081" elapsed="0.112629"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.802433" elapsed="0.113416"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.917030" level="INFO">${next} = 17885</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.916207" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.918382" level="INFO">${current_port} = 17885</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:19.917460" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.798128" elapsed="0.120482"/>
</kw>
<msg time="2026-08-15T23:55:19.918718" level="INFO">Repeating keyword, round 56/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:19.920979" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:19.920794" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.920762" elapsed="0.000308"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.921575" level="INFO">${current_Date} = 2026-08-15 23:55:19.921</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:19.921340" elapsed="0.000272"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:19.922340" level="INFO">${ellapsed_seconds} = 2670.416</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:19.921844" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.922851" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:19.922479" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:19.922452" elapsed="0.000511"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:19.920447" elapsed="0.002580"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.923784" level="INFO">${number} = 56</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.923231" elapsed="0.000611"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.925827" level="INFO">${number} = 56</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.925333" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:19.928620" level="INFO">${device-port} = 17885</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:19.927506" elapsed="0.001228"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.932415" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:19.960471" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:19.960697" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.932313" elapsed="0.028442"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:19.961678" elapsed="0.000054"/>
</kw>
<msg time="2026-08-15T23:55:19.961840" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:19.931104" elapsed="0.031440"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:19.963409" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17885 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.028344" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.028573" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:19.962927" elapsed="0.065702"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.028744" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:55:20.029208" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:19.930504" elapsed="0.098816"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.029994" elapsed="0.000916"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:19.929386" elapsed="0.101728"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:19.926855" elapsed="0.104453"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:19.926089" elapsed="0.105354"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.924690" elapsed="0.106882"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:19.924062" elapsed="0.107605"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.032862" level="INFO">${next} = 17886</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.032055" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.034203" level="INFO">${current_port} = 17886</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.033290" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:19.919282" elapsed="0.115148"/>
</kw>
<msg time="2026-08-15T23:55:20.034662" level="INFO">Repeating keyword, round 57/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.036585" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.036468" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.036447" elapsed="0.000217"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.037008" level="INFO">${current_Date} = 2026-08-15 23:55:20.037</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.036838" elapsed="0.000197"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.037530" level="INFO">${ellapsed_seconds} = 2670.3</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.037186" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.037903" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.037627" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.037609" elapsed="0.000376"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.036211" elapsed="0.001819"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.038559" level="INFO">${number} = 57</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.038189" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.040077" level="INFO">${number} = 57</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.039691" elapsed="0.000413"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.042111" level="INFO">${device-port} = 17886</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.041289" elapsed="0.000904"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.044927" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.080440" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.080656" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.044824" elapsed="0.035890"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.081705" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:20.081890" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.043938" elapsed="0.038726"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.083623" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17886 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.148771" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.149118" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.083049" elapsed="0.066136"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.149350" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:55:20.149959" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.043498" elapsed="0.106591"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.150963" elapsed="0.001340"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.042640" elapsed="0.109906"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.040833" elapsed="0.111939"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.040268" elapsed="0.112676"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.039215" elapsed="0.113899"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.038743" elapsed="0.114493"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.154749" level="INFO">${next} = 17887</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.153692" elapsed="0.001200"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.156096" level="INFO">${current_port} = 17887</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.155400" elapsed="0.000739"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.035256" elapsed="0.120946"/>
</kw>
<msg time="2026-08-15T23:55:20.156244" level="INFO">Repeating keyword, round 58/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.157558" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.157432" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.157410" elapsed="0.000213"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.158041" level="INFO">${current_Date} = 2026-08-15 23:55:20.158</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.157850" elapsed="0.000217"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.158567" level="INFO">${ellapsed_seconds} = 2670.179</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.158220" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.158945" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.158664" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.158646" elapsed="0.000381"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.157173" elapsed="0.001899"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.159598" level="INFO">${number} = 58</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.159219" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.161081" level="INFO">${number} = 58</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.160701" elapsed="0.000407"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.163115" level="INFO">${device-port} = 17887</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.162309" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.168888" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.200259" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.200486" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.168767" elapsed="0.031778"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.201479" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:20.201616" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.164955" elapsed="0.037408"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.203226" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17887 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.268232" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.268442" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.202711" elapsed="0.065785"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.268615" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:20.269074" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.164515" elapsed="0.104667"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.269730" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.163671" elapsed="0.107203"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.161856" elapsed="0.109221"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.161269" elapsed="0.109908"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.160250" elapsed="0.111078"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.159781" elapsed="0.111645"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.272583" level="INFO">${next} = 17888</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.271769" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.273956" level="INFO">${current_port} = 17888</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.273062" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.156482" elapsed="0.117698"/>
</kw>
<msg time="2026-08-15T23:55:20.274265" level="INFO">Repeating keyword, round 59/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.276831" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.276559" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.276516" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.277647" level="INFO">${current_Date} = 2026-08-15 23:55:20.277</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.277303" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.278751" level="INFO">${ellapsed_seconds} = 2670.06</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.278071" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.279571" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.279001" elapsed="0.000694"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.278960" elapsed="0.000794"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.276032" elapsed="0.003823"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.280373" level="INFO">${number} = 59</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.280011" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.281873" level="INFO">${number} = 59</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.281508" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.283908" level="INFO">${device-port} = 17888</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.283081" elapsed="0.000915"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.286603" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.320484" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.320744" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.286339" elapsed="0.034503"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.321856" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:20.321999" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.285646" elapsed="0.037101"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.323699" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17888 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.388363" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.388592" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.323139" elapsed="0.065510"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.388769" elapsed="0.000130"/>
</return>
<msg time="2026-08-15T23:55:20.389260" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.285239" elapsed="0.104131"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.389997" elapsed="0.000983"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.284437" elapsed="0.106740"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.282592" elapsed="0.108826"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.282058" elapsed="0.109463"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.281056" elapsed="0.110590"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.280571" elapsed="0.111169"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.392984" level="INFO">${next} = 17889</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.392139" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.394411" level="INFO">${current_port} = 17889</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.393508" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.274684" elapsed="0.119950"/>
</kw>
<msg time="2026-08-15T23:55:20.394720" level="INFO">Repeating keyword, round 60/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.396844" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.396670" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.396644" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.397415" level="INFO">${current_Date} = 2026-08-15 23:55:20.397</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.397184" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.398123" level="INFO">${ellapsed_seconds} = 2669.94</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.397658" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.398596" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.398258" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.398233" elapsed="0.000474"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.396336" elapsed="0.002434"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.399519" level="INFO">${number} = 60</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.398997" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.401537" level="INFO">${number} = 60</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.401062" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.404469" level="INFO">${device-port} = 17889</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.403249" elapsed="0.001335"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.407403" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.440321" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.440543" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.407304" elapsed="0.033296"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.441551" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:20.441685" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.406580" elapsed="0.035811"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.443315" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17889 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.508744" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.509190" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.442742" elapsed="0.066513"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.509438" elapsed="0.000157"/>
</return>
<msg time="2026-08-15T23:55:20.510099" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.406168" elapsed="0.104048"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.511011" elapsed="0.001197"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.405240" elapsed="0.107171"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.402556" elapsed="0.110058"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.401797" elapsed="0.111063"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.400419" elapsed="0.112594"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.399773" elapsed="0.113346"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.514379" level="INFO">${next} = 17890</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.513490" elapsed="0.000951"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.515943" level="INFO">${current_port} = 17890</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.514887" elapsed="0.001164"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.395253" elapsed="0.120940"/>
</kw>
<msg time="2026-08-15T23:55:20.516293" level="INFO">Repeating keyword, round 61/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.519116" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.518985" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.518954" elapsed="0.000248"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.519558" level="INFO">${current_Date} = 2026-08-15 23:55:20.519</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.519366" elapsed="0.000222"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.520129" level="INFO">${ellapsed_seconds} = 2669.818</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.519742" elapsed="0.000415"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.520508" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.520229" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.520208" elapsed="0.000382"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.518428" elapsed="0.002208"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.521199" level="INFO">${number} = 61</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.520790" elapsed="0.000436"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.522675" level="INFO">${number} = 61</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.522321" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.524780" level="INFO">${device-port} = 17890</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.523965" elapsed="0.000928"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.527571" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.560265" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.560505" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.527460" elapsed="0.033122"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.561619" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:20.561772" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.526615" elapsed="0.035991"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.563552" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17890 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.632751" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.633020" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.562998" elapsed="0.070095"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.633215" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:20.633642" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.526182" elapsed="0.107575"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.634479" elapsed="0.001005"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.525348" elapsed="0.110336"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.523471" elapsed="0.112462"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.522883" elapsed="0.113157"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.521864" elapsed="0.114311"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.521384" elapsed="0.114904"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.637636" level="INFO">${next} = 17891</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.636679" elapsed="0.001022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.639203" level="INFO">${current_port} = 17891</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.638140" elapsed="0.001197"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.516869" elapsed="0.122607"/>
</kw>
<msg time="2026-08-15T23:55:20.639563" level="INFO">Repeating keyword, round 62/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.641299" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.641143" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.641116" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.641901" level="INFO">${current_Date} = 2026-08-15 23:55:20.642</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.641647" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.642593" level="INFO">${ellapsed_seconds} = 2669.695</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.642151" elapsed="0.000479"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.643131" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.642730" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.642704" elapsed="0.000541"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.640782" elapsed="0.002528"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.644124" level="INFO">${number} = 62</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.643554" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.646233" level="INFO">${number} = 62</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.645701" elapsed="0.000572"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.649129" level="INFO">${device-port} = 17891</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.647988" elapsed="0.001255"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.652969" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.684303" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.684697" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.652708" elapsed="0.032056"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.686108" elapsed="0.000069"/>
</kw>
<msg time="2026-08-15T23:55:20.686265" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.651666" elapsed="0.035507"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.688207" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17891 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.752396" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.752630" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.687604" elapsed="0.065083"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.752865" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:55:20.753347" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.651045" elapsed="0.102417"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.754083" elapsed="0.001071"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.649913" elapsed="0.105441"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.647323" elapsed="0.108225"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.646498" elapsed="0.109159"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.645054" elapsed="0.110734"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.644394" elapsed="0.111550"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.757166" level="INFO">${next} = 17892</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.756308" elapsed="0.000919"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.758542" level="INFO">${current_port} = 17892</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.757603" elapsed="0.001035"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.639994" elapsed="0.118780"/>
</kw>
<msg time="2026-08-15T23:55:20.758935" level="INFO">Repeating keyword, round 63/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.761657" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.761408" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.761363" elapsed="0.000509"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.762602" level="INFO">${current_Date} = 2026-08-15 23:55:20.762</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.762226" elapsed="0.000439"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.763888" level="INFO">${ellapsed_seconds} = 2669.575</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.763085" elapsed="0.000842"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.764284" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.764014" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.763992" elapsed="0.000373"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.760860" elapsed="0.003550"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.764941" level="INFO">${number} = 63</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.764558" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.766404" level="INFO">${number} = 63</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.766054" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.768445" level="INFO">${device-port} = 17892</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.767640" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.771071" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.804688" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.804946" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.770947" elapsed="0.034060"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.805928" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:20.806064" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.770238" elapsed="0.036618"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.807740" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17892 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.872539" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.872762" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.807251" elapsed="0.065609"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.872978" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:20.873392" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.769817" elapsed="0.103690"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.874122" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.769007" elapsed="0.106259"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.767190" elapsed="0.108270"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.766593" elapsed="0.108971"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.765583" elapsed="0.110108"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.765126" elapsed="0.110665"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.877007" level="INFO">${next} = 17893</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.876193" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.878363" level="INFO">${current_port} = 17893</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:20.877451" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.759446" elapsed="0.119146"/>
</kw>
<msg time="2026-08-15T23:55:20.878680" level="INFO">Repeating keyword, round 64/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:20.880855" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:20.880671" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.880642" elapsed="0.000308"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.881431" level="INFO">${current_Date} = 2026-08-15 23:55:20.881</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:20.881206" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:20.882143" level="INFO">${ellapsed_seconds} = 2669.456</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:20.881681" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.882615" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:20.882281" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:20.882254" elapsed="0.000474"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:20.880278" elapsed="0.002515"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.883562" level="INFO">${number} = 64</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.883043" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.885639" level="INFO">${number} = 64</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.885158" elapsed="0.000519"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:20.888487" level="INFO">${device-port} = 17893</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:20.887357" elapsed="0.001249"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.892265" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:20.924433" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.924658" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.892162" elapsed="0.032556"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:20.925645" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:20.925782" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:20.891087" elapsed="0.035427"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:20.927578" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17893 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:20.996442" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:20.996682" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:20.926904" elapsed="0.069841"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:20.996934" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:55:20.997428" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:20.890426" elapsed="0.107131"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:20.998247" elapsed="0.001009"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:20.889276" elapsed="0.110178"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:20.886662" elapsed="0.112986"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:20.885922" elapsed="0.113829"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.884496" elapsed="0.115438"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:20.883840" elapsed="0.116197"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.001220" level="INFO">${next} = 17894</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.000394" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.002604" level="INFO">${current_port} = 17894</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.001668" elapsed="0.001035"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:20.879220" elapsed="0.123677"/>
</kw>
<msg time="2026-08-15T23:55:21.003050" level="INFO">Repeating keyword, round 65/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.005012" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.004851" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.004798" elapsed="0.000305"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.005569" level="INFO">${current_Date} = 2026-08-15 23:55:21.005</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.005311" elapsed="0.000297"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.006308" level="INFO">${ellapsed_seconds} = 2669.332</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.005845" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.006834" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.006447" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.006418" elapsed="0.000568"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.004479" elapsed="0.002574"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.007792" level="INFO">${number} = 65</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.007263" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.009905" level="INFO">${number} = 65</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.009383" elapsed="0.000562"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.012910" level="INFO">${device-port} = 17894</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.011696" elapsed="0.001320"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.015746" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.048512" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.048743" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.015483" elapsed="0.033362"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.049772" elapsed="0.000096"/>
</kw>
<msg time="2026-08-15T23:55:21.049950" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.014737" elapsed="0.035942"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.051621" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17894 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.116327" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.116552" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.051124" elapsed="0.065491"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.116733" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:55:21.117211" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.014317" elapsed="0.103018"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.118030" elapsed="0.001024"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.013483" elapsed="0.105787"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.010965" elapsed="0.108520"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.010168" elapsed="0.109451"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.008723" elapsed="0.111034"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.008083" elapsed="0.111836"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.121081" level="INFO">${next} = 17895</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.120270" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.122449" level="INFO">${current_port} = 17895</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.121535" elapsed="0.001017"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.003516" elapsed="0.119189"/>
</kw>
<msg time="2026-08-15T23:55:21.122911" level="INFO">Repeating keyword, round 66/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.124706" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.124588" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.124568" elapsed="0.000207"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.125145" level="INFO">${current_Date} = 2026-08-15 23:55:21.125</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.124986" elapsed="0.000187"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.125654" level="INFO">${ellapsed_seconds} = 2669.212</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.125332" elapsed="0.000349"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.126015" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.125753" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.125734" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.124331" elapsed="0.001812"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.126661" level="INFO">${number} = 66</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.126291" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.128169" level="INFO">${number} = 66</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.127814" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.130230" level="INFO">${device-port} = 17895</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.129388" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.133056" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.168779" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.169098" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.132784" elapsed="0.036377"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.170312" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:21.170459" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.132115" elapsed="0.039219"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.172253" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17895 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.240510" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.240777" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.171704" elapsed="0.069173"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.241014" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:55:21.241502" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.131642" elapsed="0.109967"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.242253" elapsed="0.001058"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.130794" elapsed="0.112715"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.128909" elapsed="0.114797"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.128358" elapsed="0.115470"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.127343" elapsed="0.116575"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.126884" elapsed="0.117103"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.244723" level="INFO">${next} = 17896</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.244214" elapsed="0.000547"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.245590" level="INFO">${current_port} = 17896</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.245028" elapsed="0.000623"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.123383" elapsed="0.122353"/>
</kw>
<msg time="2026-08-15T23:55:21.245826" level="INFO">Repeating keyword, round 67/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.247598" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.247437" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.247407" elapsed="0.000280"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.248167" level="INFO">${current_Date} = 2026-08-15 23:55:21.248</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.247922" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.248909" level="INFO">${ellapsed_seconds} = 2669.089</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.248414" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.249403" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.249046" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.249019" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.247094" elapsed="0.002482"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.250307" level="INFO">${number} = 67</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.249780" elapsed="0.000565"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.252344" level="INFO">${number} = 67</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.251868" elapsed="0.000513"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.255153" level="INFO">${device-port} = 17896</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.254015" elapsed="0.001250"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.258068" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.292503" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.292741" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.257964" elapsed="0.034878"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.293837" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:21.293989" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.257107" elapsed="0.037642"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.295673" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17896 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.360421" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.360676" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.295171" elapsed="0.065562"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.360901" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:21.361363" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.256669" elapsed="0.104805"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.362110" elapsed="0.001034"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.255884" elapsed="0.107467"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.253367" elapsed="0.110176"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.252601" elapsed="0.111049"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.251228" elapsed="0.112550"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.250563" elapsed="0.113382"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.365130" level="INFO">${next} = 17897</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.364302" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.366502" level="INFO">${current_port} = 17897</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.365559" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.246140" elapsed="0.120611"/>
</kw>
<msg time="2026-08-15T23:55:21.366905" level="INFO">Repeating keyword, round 68/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.369509" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.369258" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.369213" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.370472" level="INFO">${current_Date} = 2026-08-15 23:55:21.370</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.370100" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.371688" level="INFO">${ellapsed_seconds} = 2668.967</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.370948" elapsed="0.000800"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.372137" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.371873" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.371854" elapsed="0.000364"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.368690" elapsed="0.003573"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.372773" level="INFO">${number} = 68</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.372410" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.374231" level="INFO">${number} = 68</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.373885" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.376236" level="INFO">${device-port} = 17897</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.375443" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.378981" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.412327" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.412550" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.378879" elapsed="0.033729"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.413567" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:21.413703" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.378008" elapsed="0.036500"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.415422" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17897 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.480476" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.480703" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.414932" elapsed="0.065828"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.480920" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:21.481331" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.377570" elapsed="0.103871"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.482047" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.376761" elapsed="0.106452"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.374995" elapsed="0.108404"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.374418" elapsed="0.109080"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.373418" elapsed="0.110204"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.372971" elapsed="0.110746"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.484936" level="INFO">${next} = 17898</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.484112" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.486253" level="INFO">${current_port} = 17898</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.485363" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.367371" elapsed="0.119109"/>
</kw>
<msg time="2026-08-15T23:55:21.486565" level="INFO">Repeating keyword, round 69/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.488636" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.488482" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.488455" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.489164" level="INFO">${current_Date} = 2026-08-15 23:55:21.489</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.488948" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.489851" level="INFO">${ellapsed_seconds} = 2668.848</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.489408" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.490316" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.489987" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.489961" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.488150" elapsed="0.002339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.491239" level="INFO">${number} = 69</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.490706" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.493242" level="INFO">${number} = 69</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.492749" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.496015" level="INFO">${device-port} = 17898</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.494898" elapsed="0.001228"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.499998" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.536440" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.536682" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.499735" elapsed="0.037014"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.537669" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:21.537828" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.498454" elapsed="0.040089"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.539455" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17898 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.604508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.604772" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.538965" elapsed="0.065900"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.605001" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:21.605449" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.497872" elapsed="0.107687"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.606199" elapsed="0.000991"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.496742" elapsed="0.110639"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.494242" elapsed="0.113332"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.493497" elapsed="0.114179"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.492128" elapsed="0.115709"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.491491" elapsed="0.116450"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.609096" level="INFO">${next} = 17899</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.608291" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.610421" level="INFO">${current_port} = 17899</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.609520" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.487096" elapsed="0.123572"/>
</kw>
<msg time="2026-08-15T23:55:21.610757" level="INFO">Repeating keyword, round 70/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.613427" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.613169" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.613126" elapsed="0.000444"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.614386" level="INFO">${current_Date} = 2026-08-15 23:55:21.614</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.614023" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.615556" level="INFO">${ellapsed_seconds} = 2668.723</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.614854" elapsed="0.000760"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.616345" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.615773" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.615732" elapsed="0.000790"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.612584" elapsed="0.004043"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.617832" level="INFO">${number} = 70</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.616990" elapsed="0.000904"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.620537" level="INFO">${number} = 70</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.620188" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.622540" level="INFO">${device-port} = 17899</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.621735" elapsed="0.000899"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.628308" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.652734" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.652997" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.628203" elapsed="0.024854"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.653963" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:21.654101" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.624340" elapsed="0.030601"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.655779" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17899 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.720728" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.721019" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.655298" elapsed="0.065782"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.721224" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:21.721744" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.623919" elapsed="0.098021"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.722717" elapsed="0.001062"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.623098" elapsed="0.100928"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.621282" elapsed="0.102937"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.620723" elapsed="0.103597"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.619320" elapsed="0.105121"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.618240" elapsed="0.106295"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.725676" level="INFO">${next} = 17900</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.724925" elapsed="0.000811"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.727161" level="INFO">${current_port} = 17900</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.726141" elapsed="0.001122"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.611274" elapsed="0.116145"/>
</kw>
<msg time="2026-08-15T23:55:21.727514" level="INFO">Repeating keyword, round 71/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.730134" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.729845" elapsed="0.000393"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.729772" elapsed="0.000518"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.731016" level="INFO">${current_Date} = 2026-08-15 23:55:21.731</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.730682" elapsed="0.000373"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.731721" level="INFO">${ellapsed_seconds} = 2668.606</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.731267" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.732222" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.731882" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.731853" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.729283" elapsed="0.003116"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.733139" level="INFO">${number} = 71</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.732602" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.735423" level="INFO">${number} = 71</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.734871" elapsed="0.000594"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.738620" level="INFO">${device-port} = 17900</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.737452" elapsed="0.001284"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.742631" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.772649" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.772942" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.742160" elapsed="0.030845"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.774080" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:21.774225" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.741125" elapsed="0.033906"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.775611" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17900 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.840521" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.840737" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.775261" elapsed="0.065533"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.840951" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:21.841374" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.740497" elapsed="0.100988"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.842096" elapsed="0.001010"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.739381" elapsed="0.103918"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.736634" elapsed="0.106859"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.735718" elapsed="0.107876"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.734142" elapsed="0.109577"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.733392" elapsed="0.110460"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.845023" level="INFO">${next} = 17901</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.844208" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.846343" level="INFO">${current_port} = 17901</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.845444" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.727994" elapsed="0.118593"/>
</kw>
<msg time="2026-08-15T23:55:21.846674" level="INFO">Repeating keyword, round 72/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.849255" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.849011" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.848969" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.850178" level="INFO">${current_Date} = 2026-08-15 23:55:21.850</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.849789" elapsed="0.000447"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.851187" level="INFO">${ellapsed_seconds} = 2668.487</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.850610" elapsed="0.000614"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.851674" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.851322" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.851297" elapsed="0.000489"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.848453" elapsed="0.003418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.852596" level="INFO">${number} = 72</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.852082" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.854646" level="INFO">${number} = 72</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.854149" elapsed="0.000535"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.857426" level="INFO">${device-port} = 17901</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.856318" elapsed="0.001218"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.861087" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:21.892284" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.892507" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.860943" elapsed="0.031623"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.893473" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:21.893606" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.859909" elapsed="0.034410"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.895116" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17901 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:21.960377" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:21.960597" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.894731" elapsed="0.065921"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:21.960766" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:55:21.961219" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.859315" elapsed="0.102013"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:21.961932" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.858174" elapsed="0.104870"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.855660" elapsed="0.107570"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.854926" elapsed="0.108404"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.853504" elapsed="0.109948"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.852880" elapsed="0.110669"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.964681" level="INFO">${next} = 17902</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.963935" elapsed="0.000805"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.966046" level="INFO">${current_port} = 17902</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:21.965156" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.847161" elapsed="0.119111"/>
</kw>
<msg time="2026-08-15T23:55:21.966358" level="INFO">Repeating keyword, round 73/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:21.969044" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:21.968761" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.968716" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.969914" level="INFO">${current_Date} = 2026-08-15 23:55:21.970</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:21.969527" elapsed="0.000450"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:21.971035" level="INFO">${ellapsed_seconds} = 2668.367</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:21.970310" elapsed="0.000752"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:21.971384" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:21.971133" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:21.971114" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:21.968222" elapsed="0.003290"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.972063" level="INFO">${number} = 73</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.971660" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.973502" level="INFO">${number} = 73</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.973162" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:21.975524" level="INFO">${device-port} = 17902</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:21.974728" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:21.978333" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.014315" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.014573" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:21.978214" elapsed="0.036422"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.015612" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:22.015750" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:21.977418" elapsed="0.039098"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.017401" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17902 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.084553" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.084782" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.016903" elapsed="0.068029"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.085099" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:22.085535" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:21.976946" elapsed="0.108704"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.086362" elapsed="0.001066"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:21.976069" elapsed="0.111560"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:21.974250" elapsed="0.113647"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:21.973689" elapsed="0.114352"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.972698" elapsed="0.115537"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:21.972248" elapsed="0.116094"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.089638" level="INFO">${next} = 17903</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.088701" elapsed="0.001002"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.091318" level="INFO">${current_port} = 17903</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.090195" elapsed="0.001235"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:21.966859" elapsed="0.124709"/>
</kw>
<msg time="2026-08-15T23:55:22.091658" level="INFO">Repeating keyword, round 74/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.094523" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.094187" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.094143" elapsed="0.000531"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.095340" level="INFO">${current_Date} = 2026-08-15 23:55:22.095</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.095077" elapsed="0.000310"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.096079" level="INFO">${ellapsed_seconds} = 2668.242</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.095607" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.096570" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.096221" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.096194" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.093566" elapsed="0.003186"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.097524" level="INFO">${number} = 74</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.096985" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.099704" level="INFO">${number} = 74</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.099206" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.102555" level="INFO">${device-port} = 17903</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.101391" elapsed="0.001278"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.106260" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.136192" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.136417" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.106119" elapsed="0.030357"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.137384" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:22.137519" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.105037" elapsed="0.033211"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.139156" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17903 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.204638" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.204926" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.138631" elapsed="0.066356"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.205122" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:22.205556" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.104436" elapsed="0.101229"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.206294" elapsed="0.000952"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.103312" elapsed="0.104125"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.100727" elapsed="0.106903"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.099988" elapsed="0.107743"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.098537" elapsed="0.109365"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.097784" elapsed="0.110218"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.209159" level="INFO">${next} = 17904</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.208354" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.210551" level="INFO">${current_port} = 17904</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.209583" elapsed="0.001067"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.092129" elapsed="0.118654"/>
</kw>
<msg time="2026-08-15T23:55:22.210920" level="INFO">Repeating keyword, round 75/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.212614" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.212457" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.212428" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.213158" level="INFO">${current_Date} = 2026-08-15 23:55:22.213</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.212931" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.213867" level="INFO">${ellapsed_seconds} = 2668.124</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.213406" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.214374" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.214005" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.213978" elapsed="0.000509"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.212111" elapsed="0.002440"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.215285" level="INFO">${number} = 75</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.214755" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.217300" level="INFO">${number} = 75</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.216819" elapsed="0.000518"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.220089" level="INFO">${device-port} = 17904</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.218978" elapsed="0.001225"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.223499" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.256211" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.256430" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.223397" elapsed="0.033091"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.257404" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:22.257538" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.222578" elapsed="0.035747"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.259189" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17904 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.328195" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.328402" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.258678" elapsed="0.069778"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.328564" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:22.329006" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.221970" elapsed="0.107145"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.329666" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.220841" elapsed="0.109916"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.218319" elapsed="0.112672"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.217555" elapsed="0.113537"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.216182" elapsed="0.115032"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.215537" elapsed="0.115771"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.332444" level="INFO">${next} = 17905</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.331651" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.333764" level="INFO">${current_port} = 17905</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.332922" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.211216" elapsed="0.122816"/>
</kw>
<msg time="2026-08-15T23:55:22.334118" level="INFO">Repeating keyword, round 76/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.336718" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.336475" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.336432" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.337660" level="INFO">${current_Date} = 2026-08-15 23:55:22.337</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.337312" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.338838" level="INFO">${ellapsed_seconds} = 2668.0</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.338093" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.339304" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.338977" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.338951" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.335942" elapsed="0.003535"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.340219" level="INFO">${number} = 76</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.339683" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.342223" level="INFO">${number} = 76</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.341732" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.345044" level="INFO">${device-port} = 17905</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.343942" elapsed="0.001213"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.348304" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.376777" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.377053" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.348205" elapsed="0.028908"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.378040" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:22.378181" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.347438" elapsed="0.031493"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.379783" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17905 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.448441" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.448707" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.379292" elapsed="0.069473"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.448946" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:55:22.449406" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.347021" elapsed="0.102498"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.450166" elapsed="0.001022"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.345762" elapsed="0.105617"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.343293" elapsed="0.108274"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.342497" elapsed="0.109172"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.341114" elapsed="0.110681"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.340473" elapsed="0.111467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.453133" level="INFO">${next} = 17906</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.452295" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.454550" level="INFO">${current_port} = 17906</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.453561" elapsed="0.001091"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.334638" elapsed="0.120149"/>
</kw>
<msg time="2026-08-15T23:55:22.454919" level="INFO">Repeating keyword, round 77/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.456602" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.456444" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.456414" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.457153" level="INFO">${current_Date} = 2026-08-15 23:55:22.457</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.456920" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.457867" level="INFO">${ellapsed_seconds} = 2667.88</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.457400" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.458360" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.458003" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.457976" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.456101" elapsed="0.002432"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.459271" level="INFO">${number} = 77</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.458736" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.461300" level="INFO">${number} = 77</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.460822" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.464097" level="INFO">${device-port} = 17906</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.462990" elapsed="0.001218"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.467673" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.500119" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.500341" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.467409" elapsed="0.032991"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.501332" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:22.501469" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.466575" elapsed="0.035736"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.503090" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17906 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.568195" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.568402" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.502672" elapsed="0.065784"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.568565" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:22.569011" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.465969" elapsed="0.103153"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.569673" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.464847" elapsed="0.105921"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.462338" elapsed="0.108663"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.461560" elapsed="0.109540"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.460176" elapsed="0.111046"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.459524" elapsed="0.111791"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.572452" level="INFO">${next} = 17907</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.571659" elapsed="0.000854"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.573778" level="INFO">${current_port} = 17907</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.572932" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.455246" elapsed="0.118800"/>
</kw>
<msg time="2026-08-15T23:55:22.574149" level="INFO">Repeating keyword, round 78/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.576650" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.576406" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.576362" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.577568" level="INFO">${current_Date} = 2026-08-15 23:55:22.577</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.577222" elapsed="0.000406"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.578722" level="INFO">${ellapsed_seconds} = 2667.76</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.577994" elapsed="0.000790"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.579283" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.578954" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.578922" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.575872" elapsed="0.003584"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.580193" level="INFO">${number} = 78</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.579661" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.582244" level="INFO">${number} = 78</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.581720" elapsed="0.000562"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.585022" level="INFO">${device-port} = 17907</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.583906" elapsed="0.001227"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.588911" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.620661" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.620957" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.588466" elapsed="0.032554"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.622022" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:22.622188" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.587449" elapsed="0.035498"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.623845" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17907 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.688397" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.688607" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.623314" elapsed="0.065348"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.688773" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:55:22.689226" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.586878" elapsed="0.102454"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.689933" elapsed="0.000936"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.585736" elapsed="0.105326"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.583262" elapsed="0.107989"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.582506" elapsed="0.108845"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.581092" elapsed="0.110382"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.580448" elapsed="0.111123"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.692713" level="INFO">${next} = 17908</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.691960" elapsed="0.000812"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.694113" level="INFO">${current_port} = 17908</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.693191" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.574574" elapsed="0.119775"/>
</kw>
<msg time="2026-08-15T23:55:22.694436" level="INFO">Repeating keyword, round 79/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.697005" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.696729" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.696688" elapsed="0.000459"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.697851" level="INFO">${current_Date} = 2026-08-15 23:55:22.698</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.697471" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.699006" level="INFO">${ellapsed_seconds} = 2667.639</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.698293" elapsed="0.000746"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.699360" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.699114" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.699094" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.696202" elapsed="0.003282"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.700006" level="INFO">${number} = 79</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.699629" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.701438" level="INFO">${number} = 79</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.701101" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.703432" level="INFO">${device-port} = 17908</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.702628" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.706144" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.739998" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.740215" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.706033" elapsed="0.034240"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.741185" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:22.741319" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.705185" elapsed="0.036890"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.742970" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17908 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.808132" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.808358" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.742456" elapsed="0.065958"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.808537" elapsed="0.000105"/>
</return>
<msg time="2026-08-15T23:55:22.809068" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.704750" elapsed="0.104429"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.809753" elapsed="0.000955"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.703970" elapsed="0.106964"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.702181" elapsed="0.108941"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.701623" elapsed="0.109599"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.700637" elapsed="0.110708"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.700187" elapsed="0.111251"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.812574" level="INFO">${next} = 17909</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.811783" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.813946" level="INFO">${current_port} = 17909</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.813049" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.694916" elapsed="0.119280"/>
</kw>
<msg time="2026-08-15T23:55:22.814282" level="INFO">Repeating keyword, round 80/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.816870" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.816591" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.816548" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.817880" level="INFO">${current_Date} = 2026-08-15 23:55:22.818</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.817515" elapsed="0.000403"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.818588" level="INFO">${ellapsed_seconds} = 2667.519</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.818150" elapsed="0.000475"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.819080" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.818722" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.818697" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.816065" elapsed="0.003188"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.819986" level="INFO">${number} = 80</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.819456" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.821999" level="INFO">${number} = 80</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.821508" elapsed="0.000552"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.824782" level="INFO">${device-port} = 17909</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.823675" elapsed="0.001253"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.828164" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.860555" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.860774" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.828065" elapsed="0.032804"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.861742" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:22.861907" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.827226" elapsed="0.035387"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.863474" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17909 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:22.928489" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.928698" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.862993" elapsed="0.065760"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:22.928908" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:22.929311" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.826696" elapsed="0.102724"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:22.930038" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.825542" elapsed="0.105564"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.823053" elapsed="0.108241"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.822288" elapsed="0.109106"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.820888" elapsed="0.110627"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.820240" elapsed="0.111370"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.932729" level="INFO">${next} = 17910</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.931993" elapsed="0.000795"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.934214" level="INFO">${current_port} = 17910</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:22.933197" elapsed="0.001119"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.814718" elapsed="0.119726"/>
</kw>
<msg time="2026-08-15T23:55:22.934529" level="INFO">Repeating keyword, round 81/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:22.936254" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:22.936104" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.936076" elapsed="0.000267"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.936758" level="INFO">${current_Date} = 2026-08-15 23:55:22.937</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:22.936546" elapsed="0.000248"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:22.937443" level="INFO">${ellapsed_seconds} = 2667.4</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:22.937023" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.937928" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:22.937577" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:22.937551" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:22.935752" elapsed="0.002376"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.938856" level="INFO">${number} = 81</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.938329" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.940859" level="INFO">${number} = 81</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.940369" elapsed="0.000529"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:22.943608" level="INFO">${device-port} = 17910</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:22.942507" elapsed="0.001213"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.947356" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:22.976428" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:22.976849" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.947258" elapsed="0.029657"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:22.977793" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:55:22.977981" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:22.946079" elapsed="0.032609"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:22.979545" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17910 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.044328" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.044570" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:22.979062" elapsed="0.065563"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.044751" elapsed="0.000129"/>
</return>
<msg time="2026-08-15T23:55:23.045235" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:22.945449" elapsed="0.099894"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.045999" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:22.944356" elapsed="0.102779"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:22.941872" elapsed="0.105452"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:22.941119" elapsed="0.106308"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.939725" elapsed="0.107827"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:22.939113" elapsed="0.108534"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.048796" level="INFO">${next} = 17911</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.048038" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.050189" level="INFO">${current_port} = 17911</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.049275" elapsed="0.001012"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:22.934992" elapsed="0.115425"/>
</kw>
<msg time="2026-08-15T23:55:23.050501" level="INFO">Repeating keyword, round 82/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.053268" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.053003" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.052957" elapsed="0.000454"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.054089" level="INFO">${current_Date} = 2026-08-15 23:55:23.054</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.053842" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.054773" level="INFO">${ellapsed_seconds} = 2667.283</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.054337" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.055279" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.054936" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.054910" elapsed="0.000479"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.052315" elapsed="0.003138"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.056192" level="INFO">${number} = 82</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.055661" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.058246" level="INFO">${number} = 82</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.057715" elapsed="0.000569"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.061052" level="INFO">${device-port} = 17911</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.059931" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.067017" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.096382" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.096621" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.066912" elapsed="0.029770"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.097629" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:23.097766" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.063361" elapsed="0.035171"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.099503" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17911 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.164375" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.164601" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.098920" elapsed="0.065739"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.164774" elapsed="0.000114"/>
</return>
<msg time="2026-08-15T23:55:23.165231" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.062943" elapsed="0.102400"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.165991" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.061774" elapsed="0.105321"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.059276" elapsed="0.108010"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.058513" elapsed="0.108873"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.057087" elapsed="0.110424"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.056442" elapsed="0.111167"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.168749" level="INFO">${next} = 17912</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.167988" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.170173" level="INFO">${current_port} = 17912</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.169216" elapsed="0.001060"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.051002" elapsed="0.119404"/>
</kw>
<msg time="2026-08-15T23:55:23.170494" level="INFO">Repeating keyword, round 83/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.173060" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.172781" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.172740" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.174015" level="INFO">${current_Date} = 2026-08-15 23:55:23.174</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.173524" elapsed="0.000569"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.174987" level="INFO">${ellapsed_seconds} = 2667.163</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.174439" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.175329" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.175085" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.175066" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.172253" elapsed="0.003201"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.175982" level="INFO">${number} = 83</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.175599" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.177411" level="INFO">${number} = 83</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.177074" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.179404" level="INFO">${device-port} = 17912</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.178602" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.182156" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.216514" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.216772" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.181882" elapsed="0.034989"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.218067" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:23.218207" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.181176" elapsed="0.037837"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.219898" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17912 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.284577" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.284792" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.219372" elapsed="0.065515"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.285004" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:23.285425" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.180743" elapsed="0.104793"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.286207" elapsed="0.000925"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.179948" elapsed="0.107377"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.178153" elapsed="0.109358"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.177596" elapsed="0.110016"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.176612" elapsed="0.111125"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.176164" elapsed="0.111709"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.289028" level="INFO">${next} = 17913</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.288221" elapsed="0.000868"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.290366" level="INFO">${current_port} = 17913</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.289449" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.170963" elapsed="0.119626"/>
</kw>
<msg time="2026-08-15T23:55:23.290673" level="INFO">Repeating keyword, round 84/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.293238" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.292995" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.292954" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.294178" level="INFO">${current_Date} = 2026-08-15 23:55:23.294</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.293772" elapsed="0.000464"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.295288" level="INFO">${ellapsed_seconds} = 2667.043</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.294564" elapsed="0.000782"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.296072" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.295503" elapsed="0.000694"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.295462" elapsed="0.000789"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.292440" elapsed="0.003914"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.297519" level="INFO">${number} = 84</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.296677" elapsed="0.000901"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.299757" level="INFO">${number} = 84</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.299415" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.301740" level="INFO">${device-port} = 17913</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.300955" elapsed="0.000909"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.304292" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.336138" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.336569" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.304194" elapsed="0.032439"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.337993" elapsed="0.000071"/>
</kw>
<msg time="2026-08-15T23:55:23.338153" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.303508" elapsed="0.035552"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.340086" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17913 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.394006" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.394308" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.339490" elapsed="0.054877"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.394509" elapsed="0.000105"/>
</return>
<msg time="2026-08-15T23:55:23.395032" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.303101" elapsed="0.092045"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.395780" elapsed="0.001056"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.302302" elapsed="0.094739"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.300489" elapsed="0.096746"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.299961" elapsed="0.097379"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.298968" elapsed="0.098498"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.298002" elapsed="0.099563"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.398958" level="INFO">${next} = 17914</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.398100" elapsed="0.001095"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.400632" level="INFO">${current_port} = 17914</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.399610" elapsed="0.001128"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.291155" elapsed="0.109808"/>
</kw>
<msg time="2026-08-15T23:55:23.401060" level="INFO">Repeating keyword, round 85/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.404066" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.403725" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.403675" elapsed="0.000548"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.405029" level="INFO">${current_Date} = 2026-08-15 23:55:23.405</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.404579" elapsed="0.000519"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.406347" level="INFO">${ellapsed_seconds} = 2666.932</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.405463" elapsed="0.000949"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.407300" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.406588" elapsed="0.000861"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.406541" elapsed="0.000968"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.403116" elapsed="0.004506"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.408981" level="INFO">${number} = 85</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.408030" elapsed="0.001026"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.411680" level="INFO">${number} = 85</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.411331" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.413815" level="INFO">${device-port} = 17914</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.412938" elapsed="0.000966"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.416506" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.448922" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.449188" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.416400" elapsed="0.032850"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.450307" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:23.450448" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.415641" elapsed="0.035661"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.452205" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17914 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.520479" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.520699" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.451669" elapsed="0.069088"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.520920" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:23.521358" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.415210" elapsed="0.106261"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.522168" elapsed="0.000970"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.414364" elapsed="0.108973"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.412447" elapsed="0.111086"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.411891" elapsed="0.111745"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.410673" elapsed="0.113093"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.409447" elapsed="0.114468"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.525126" level="INFO">${next} = 17915</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.524287" elapsed="0.000902"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.526556" level="INFO">${current_port} = 17915</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.525562" elapsed="0.001093"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.401566" elapsed="0.125220"/>
</kw>
<msg time="2026-08-15T23:55:23.526938" level="INFO">Repeating keyword, round 86/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.529591" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.529337" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.529292" elapsed="0.000479"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.530604" level="INFO">${current_Date} = 2026-08-15 23:55:23.530</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.530229" elapsed="0.000437"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.531782" level="INFO">${ellapsed_seconds} = 2666.807</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.531044" elapsed="0.000845"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.532626" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.532053" elapsed="0.000698"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.532010" elapsed="0.000832"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.528731" elapsed="0.004221"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.534238" level="INFO">${number} = 86</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.533296" elapsed="0.001014"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.536197" level="INFO">${number} = 86</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.535838" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.538283" level="INFO">${device-port} = 17915</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.537453" elapsed="0.000916"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.541005" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.572673" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.572937" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.540900" elapsed="0.032099"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.573941" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:23.574080" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.540173" elapsed="0.034597"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.575651" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17915 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.641096" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.641378" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.575165" elapsed="0.066270"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.641574" elapsed="0.000137"/>
</return>
<msg time="2026-08-15T23:55:23.642131" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.539673" elapsed="0.102570"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.642958" elapsed="0.001129"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.538845" elapsed="0.105439"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.536983" elapsed="0.107494"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.536398" elapsed="0.108183"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.535356" elapsed="0.109349"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.534705" elapsed="0.110134"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.646184" level="INFO">${next} = 17916</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.645252" elapsed="0.001006"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.647688" level="INFO">${current_port} = 17916</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.646720" elapsed="0.001068"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.527392" elapsed="0.120597"/>
</kw>
<msg time="2026-08-15T23:55:23.648083" level="INFO">Repeating keyword, round 87/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.650360" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.650232" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.650207" elapsed="0.000221"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.650761" level="INFO">${current_Date} = 2026-08-15 23:55:23.651</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.650583" elapsed="0.000208"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.651317" level="INFO">${ellapsed_seconds} = 2666.686</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.650965" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.651686" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.651422" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.651402" elapsed="0.000367"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.649970" elapsed="0.001866"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.652377" level="INFO">${number} = 87</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.651992" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.653920" level="INFO">${number} = 87</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.653505" elapsed="0.000443"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.656092" level="INFO">${device-port} = 17916</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.655200" elapsed="0.000978"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.658790" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.692404" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.692640" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.658670" elapsed="0.034029"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.693717" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:23.693954" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.657970" elapsed="0.036791"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.695695" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17916 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.760434" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.760649" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.695191" elapsed="0.065514"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.760853" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:23.761260" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.657506" elapsed="0.103864"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.762196" elapsed="0.000915"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.656646" elapsed="0.106658"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.654680" elapsed="0.108811"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.654114" elapsed="0.109476"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.653041" elapsed="0.110673"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.652566" elapsed="0.111287"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.765034" level="INFO">${next} = 17917</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.764207" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.766398" level="INFO">${current_port} = 17917</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.765458" elapsed="0.001034"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.648576" elapsed="0.118045"/>
</kw>
<msg time="2026-08-15T23:55:23.766707" level="INFO">Repeating keyword, round 88/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.769371" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.769096" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.769051" elapsed="0.000480"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.770261" level="INFO">${current_Date} = 2026-08-15 23:55:23.770</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.770022" elapsed="0.000279"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.770985" level="INFO">${ellapsed_seconds} = 2666.567</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.770526" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.771454" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.771122" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.771096" elapsed="0.000469"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.768482" elapsed="0.003158"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.772415" level="INFO">${number} = 88</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.771884" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.774505" level="INFO">${number} = 88</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.774030" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.777270" level="INFO">${device-port} = 17917</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.776169" elapsed="0.001213"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.781092" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.808099" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.808329" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.780786" elapsed="0.027603"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.809328" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:23.809463" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.779768" elapsed="0.030443"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.811085" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17917 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.876998" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.877311" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.810563" elapsed="0.066810"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.877551" elapsed="0.000109"/>
</return>
<msg time="2026-08-15T23:55:23.878132" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.779181" elapsed="0.099068"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.878945" elapsed="0.001060"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.778041" elapsed="0.102169"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.775512" elapsed="0.104900"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.774762" elapsed="0.105760"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.773348" elapsed="0.107305"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.772670" elapsed="0.108087"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.882057" level="INFO">${next} = 17918</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.881183" elapsed="0.000913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.883012" level="INFO">${current_port} = 17918</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:23.882362" elapsed="0.000720"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.767190" elapsed="0.115981"/>
</kw>
<msg time="2026-08-15T23:55:23.883230" level="INFO">Repeating keyword, round 89/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:23.885024" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:23.884857" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.884821" elapsed="0.000295"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.885715" level="INFO">${current_Date} = 2026-08-15 23:55:23.885</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:23.885327" elapsed="0.000428"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:23.886479" level="INFO">${ellapsed_seconds} = 2666.452</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:23.885994" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.886990" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:23.886615" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:23.886588" elapsed="0.000515"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:23.884445" elapsed="0.002720"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.887901" level="INFO">${number} = 89</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.887368" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.889996" level="INFO">${number} = 89</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.889423" elapsed="0.000612"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:23.892922" level="INFO">${device-port} = 17918</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:23.891732" elapsed="0.001304"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.896260" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:23.924389" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.924621" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.895979" elapsed="0.028715"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:23.925724" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:55:23.925912" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:23.895175" elapsed="0.031519"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:23.927602" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17918 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:23.996960" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:23.997191" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:23.927103" elapsed="0.070146"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:23.997365" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:55:23.997858" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:23.894726" elapsed="0.103252"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:23.998546" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:23.893873" elapsed="0.105796"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:23.891089" elapsed="0.108809"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:23.890257" elapsed="0.109744"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.888778" elapsed="0.111347"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:23.888155" elapsed="0.112065"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.001366" level="INFO">${next} = 17919</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.000567" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.002764" level="INFO">${current_port} = 17919</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.001908" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:23.883545" elapsed="0.119518"/>
</kw>
<msg time="2026-08-15T23:55:24.003151" level="INFO">Repeating keyword, round 90/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.005701" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.005393" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.005351" elapsed="0.000534"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.006374" level="INFO">${current_Date} = 2026-08-15 23:55:24.006</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.006153" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.007076" level="INFO">${ellapsed_seconds} = 2666.331</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.006617" elapsed="0.000495"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.007543" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.007211" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.007185" elapsed="0.000468"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.004866" elapsed="0.002849"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.008453" level="INFO">${number} = 90</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.007940" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.010501" level="INFO">${number} = 90</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.010026" elapsed="0.000513"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.013257" level="INFO">${device-port} = 17919</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.012157" elapsed="0.001210"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.017152" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.048582" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.048873" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.016648" elapsed="0.032303"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.050023" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:24.050168" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.015700" elapsed="0.035270"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.051877" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17919 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.116639" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.116886" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.051334" elapsed="0.065610"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.117058" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:24.117496" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.015134" elapsed="0.102475"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.118210" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.014032" elapsed="0.105279"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.011507" elapsed="0.107994"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.010761" elapsed="0.108841"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.009358" elapsed="0.110367"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.008705" elapsed="0.111166"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.121071" level="INFO">${next} = 17920</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.120220" elapsed="0.000912"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.122463" level="INFO">${current_port} = 17920</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.121540" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.003575" elapsed="0.119114"/>
</kw>
<msg time="2026-08-15T23:55:24.122776" level="INFO">Repeating keyword, round 91/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.125317" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.125074" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.125031" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.126188" level="INFO">${current_Date} = 2026-08-15 23:55:24.126</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.125877" elapsed="0.000348"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.126904" level="INFO">${ellapsed_seconds} = 2666.211</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.126434" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.127382" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.127041" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.127013" elapsed="0.000479"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.124516" elapsed="0.003039"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.128290" level="INFO">${number} = 91</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.127758" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.130324" level="INFO">${number} = 91</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.129848" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.133123" level="INFO">${device-port} = 17920</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.132002" elapsed="0.001234"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.136966" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.168691" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.168950" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.136727" elapsed="0.032283"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.169942" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:24.170078" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.135575" elapsed="0.035216"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.171668" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17920 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.240928" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.241140" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.171174" elapsed="0.070032"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.241339" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:24.241743" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.135004" elapsed="0.106894"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.242462" elapsed="0.000886"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.133891" elapsed="0.109646"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.131346" elapsed="0.112387"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.130580" elapsed="0.113297"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.129195" elapsed="0.114811"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.128544" elapsed="0.115557"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.245232" level="INFO">${next} = 17921</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.244447" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.246463" level="INFO">${current_port} = 17921</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.245713" elapsed="0.000813"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.123235" elapsed="0.123374"/>
</kw>
<msg time="2026-08-15T23:55:24.246662" level="INFO">Repeating keyword, round 92/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.248253" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.248098" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.248071" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.248828" level="INFO">${current_Date} = 2026-08-15 23:55:24.249</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.248591" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.249536" level="INFO">${ellapsed_seconds} = 2666.088</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.249077" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.250038" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.249679" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.249647" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.247744" elapsed="0.002477"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.250958" level="INFO">${number} = 92</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.250427" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.252958" level="INFO">${number} = 92</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.252469" elapsed="0.000527"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.255741" level="INFO">${device-port} = 17921</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.254620" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.259241" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.293051" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.293336" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.259136" elapsed="0.034280"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.294456" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:24.294606" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.258239" elapsed="0.037225"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.296414" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17921 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.364593" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.364877" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.295892" elapsed="0.069045"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.365069" elapsed="0.000101"/>
</return>
<msg time="2026-08-15T23:55:24.365605" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.257684" elapsed="0.108033"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.366363" elapsed="0.000973"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.256512" elapsed="0.111021"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.253997" elapsed="0.113728"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.253215" elapsed="0.114662"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.251851" elapsed="0.116162"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.251213" elapsed="0.116902"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.369505" level="INFO">${next} = 17922</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.368548" elapsed="0.001024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.370554" level="INFO">${current_port} = 17922</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.369982" elapsed="0.000632"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.246970" elapsed="0.123738"/>
</kw>
<msg time="2026-08-15T23:55:24.370772" level="INFO">Repeating keyword, round 93/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.372536" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.372350" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.372322" elapsed="0.000305"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.373112" level="INFO">${current_Date} = 2026-08-15 23:55:24.373</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.372863" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.373910" level="INFO">${ellapsed_seconds} = 2665.964</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.373403" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.374412" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.374048" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.374021" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.372010" elapsed="0.002576"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.375381" level="INFO">${number} = 93</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.374792" elapsed="0.000627"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.379030" level="INFO">${number} = 93</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.376982" elapsed="0.002097"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.382075" level="INFO">${device-port} = 17922</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.380795" elapsed="0.001364"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.384965" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.416702" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.416969" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.384788" elapsed="0.032241"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.418034" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:24.418172" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.383890" elapsed="0.035089"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.419835" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17922 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.485170" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.485570" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.419324" elapsed="0.066291"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.485768" elapsed="0.000140"/>
</return>
<msg time="2026-08-15T23:55:24.486231" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.383449" elapsed="0.102861"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.486833" elapsed="0.000734"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.382615" elapsed="0.105088"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.380129" elapsed="0.107731"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.379320" elapsed="0.108731"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.376295" elapsed="0.111855"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.375641" elapsed="0.112583"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.489043" level="INFO">${next} = 17923</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.488468" elapsed="0.000617"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.489978" level="INFO">${current_port} = 17923</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.489349" elapsed="0.000693"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.371140" elapsed="0.118991"/>
</kw>
<msg time="2026-08-15T23:55:24.490193" level="INFO">Repeating keyword, round 94/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.492048" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.491867" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.491833" elapsed="0.000314"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.492693" level="INFO">${current_Date} = 2026-08-15 23:55:24.493</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.492442" elapsed="0.000290"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.493468" level="INFO">${ellapsed_seconds} = 2665.844</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.492981" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.493994" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.493609" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.493582" elapsed="0.000528"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.491467" elapsed="0.002712"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.494935" level="INFO">${number} = 94</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.494397" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.496941" level="INFO">${number} = 94</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.496436" elapsed="0.000542"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.499841" level="INFO">${device-port} = 17923</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.498680" elapsed="0.001279"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.509395" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.546968" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.547335" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.509061" elapsed="0.038335"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.548604" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:24.548751" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.502283" elapsed="0.047390"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.550617" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17923 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.621222" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.621593" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.550100" elapsed="0.071551"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.621864" elapsed="0.000123"/>
</return>
<msg time="2026-08-15T23:55:24.622404" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.501684" elapsed="0.120829"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.623204" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.500582" elapsed="0.123774"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.498041" elapsed="0.126505"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.497247" elapsed="0.127402"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.495780" elapsed="0.128998"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.495169" elapsed="0.129754"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.626141" level="INFO">${next} = 17924</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.625316" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.627518" level="INFO">${current_port} = 17924</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.626558" elapsed="0.001052"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.490531" elapsed="0.137208"/>
</kw>
<msg time="2026-08-15T23:55:24.627888" level="INFO">Repeating keyword, round 95/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.630174" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.630054" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.630032" elapsed="0.000208"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.630567" level="INFO">${current_Date} = 2026-08-15 23:55:24.630</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.630391" elapsed="0.000203"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.631089" level="INFO">${ellapsed_seconds} = 2665.707</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.630742" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.631441" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.631187" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.631169" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.629717" elapsed="0.001849"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.632104" level="INFO">${number} = 95</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.631712" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.633628" level="INFO">${number} = 95</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.633281" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.635677" level="INFO">${device-port} = 17924</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.634866" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.638567" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.673411" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.673781" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.638222" elapsed="0.035674"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.675031" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:24.675173" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.637485" elapsed="0.038514"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.676920" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17924 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.745117" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.745465" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.676380" elapsed="0.069143"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.745674" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:55:24.746218" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.637027" elapsed="0.109305"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.747100" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.636219" elapsed="0.112040"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.634382" elapsed="0.114066"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.633831" elapsed="0.114720"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.632738" elapsed="0.115939"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.632286" elapsed="0.116487"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.750072" level="INFO">${next} = 17925</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.749205" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.751500" level="INFO">${current_port} = 17925</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.750526" elapsed="0.001075"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.628359" elapsed="0.123382"/>
</kw>
<msg time="2026-08-15T23:55:24.751894" level="INFO">Repeating keyword, round 96/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.754379" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.754212" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.754183" elapsed="0.000289"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.755106" level="INFO">${current_Date} = 2026-08-15 23:55:24.755</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.754844" elapsed="0.000304"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.755846" level="INFO">${ellapsed_seconds} = 2665.582</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.755361" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.756339" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.755983" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.755957" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.753868" elapsed="0.002646"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.757298" level="INFO">${number} = 96</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.756718" elapsed="0.000618"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.759482" level="INFO">${number} = 96</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.758973" elapsed="0.000549"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.762515" level="INFO">${device-port} = 17925</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.761321" elapsed="0.001314"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.766382" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.797384" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.797898" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.766259" elapsed="0.031711"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.799294" elapsed="0.000069"/>
</kw>
<msg time="2026-08-15T23:55:24.799452" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.765239" elapsed="0.035085"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.801379" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17925 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.869510" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.869918" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.800748" elapsed="0.069233"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.870146" elapsed="0.000114"/>
</return>
<msg time="2026-08-15T23:55:24.870673" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.764521" elapsed="0.106267"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.871496" elapsed="0.001013"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.763315" elapsed="0.109389"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.760569" elapsed="0.112405"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.759757" elapsed="0.113368"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.758295" elapsed="0.114965"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.757561" elapsed="0.115804"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.874629" level="INFO">${next} = 17926</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.873730" elapsed="0.000960"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.876065" level="INFO">${current_port} = 17926</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:24.875113" elapsed="0.001051"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.752394" elapsed="0.123903"/>
</kw>
<msg time="2026-08-15T23:55:24.876385" level="INFO">Repeating keyword, round 97/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:24.892238" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:24.892084" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.892056" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.892758" level="INFO">${current_Date} = 2026-08-15 23:55:24.893</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:24.892534" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:24.893340" level="INFO">${ellapsed_seconds} = 2665.444</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:24.892967" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.893701" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:24.893438" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:24.893419" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:24.891713" elapsed="0.002135"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.894447" level="INFO">${number} = 97</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.894015" elapsed="0.000459"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.895931" level="INFO">${number} = 97</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.895564" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:24.898027" level="INFO">${device-port} = 17926</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:24.897218" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.900612" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:24.921151" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.921376" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.900488" elapsed="0.020947"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:24.922372" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:24.922507" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:24.899783" elapsed="0.023560"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:24.924212" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17926 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:24.996868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:24.997134" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:24.923694" elapsed="0.073499"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:24.997310" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:24.997731" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:24.899367" elapsed="0.098526"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:24.998471" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:24.898555" elapsed="0.101020"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:24.896697" elapsed="0.103069"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:24.896118" elapsed="0.103799"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.895108" elapsed="0.104937"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:24.894633" elapsed="0.105508"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.001342" level="INFO">${next} = 17927</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.000493" elapsed="0.000910"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.002692" level="INFO">${current_port} = 17927</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.001768" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:24.876919" elapsed="0.126069"/>
</kw>
<msg time="2026-08-15T23:55:25.003075" level="INFO">Repeating keyword, round 98/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.005650" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.005405" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.005359" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.006316" level="INFO">${current_Date} = 2026-08-15 23:55:25.006</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.006149" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.006824" level="INFO">${ellapsed_seconds} = 2665.331</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.006493" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.007174" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.006924" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.006906" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.004773" elapsed="0.002526"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.007826" level="INFO">${number} = 98</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.007446" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.009280" level="INFO">${number} = 98</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.008914" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.011254" level="INFO">${device-port} = 17927</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.010465" elapsed="0.000869"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.013829" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.048436" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.048674" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.013707" elapsed="0.035026"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.049715" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:25.049886" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.013022" elapsed="0.037561"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.051459" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17927 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.116939" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.117203" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.050972" elapsed="0.066289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.117389" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:55:25.117893" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.012572" elapsed="0.105439"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.118605" elapsed="0.000954"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.011770" elapsed="0.107984"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.010015" elapsed="0.109987"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.009465" elapsed="0.110643"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.008454" elapsed="0.111786"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.008008" elapsed="0.112331"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.121529" level="INFO">${next} = 17928</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.120692" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.122946" level="INFO">${current_port} = 17928</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.122003" elapsed="0.001041"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.003504" elapsed="0.119671"/>
</kw>
<msg time="2026-08-15T23:55:25.123262" level="INFO">Repeating keyword, round 99/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.125994" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.125709" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.125664" elapsed="0.000422"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.126521" level="INFO">${current_Date} = 2026-08-15 23:55:25.126</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.126292" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.127232" level="INFO">${ellapsed_seconds} = 2665.211</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.126767" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.127719" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.127375" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.127348" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.125130" elapsed="0.002787"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.128630" level="INFO">${number} = 99</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.128122" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.130672" level="INFO">${number} = 99</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.130198" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.133476" level="INFO">${device-port} = 17928</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.132341" elapsed="0.001246"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.137179" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.164766" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.165041" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.137036" elapsed="0.028064"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.166017" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:25.166151" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.135983" elapsed="0.031021"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.167875" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17928 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.236989" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.237207" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.167362" elapsed="0.069900"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.237374" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:25.237863" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.135372" elapsed="0.102612"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.238548" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.134239" elapsed="0.105413"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.131684" elapsed="0.108203"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.130950" elapsed="0.109042"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.129546" elapsed="0.110571"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.128915" elapsed="0.111298"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.241392" level="INFO">${next} = 17929</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.240558" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.242711" level="INFO">${current_port} = 17929</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.241857" elapsed="0.001113"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.123707" elapsed="0.119412"/>
</kw>
<msg time="2026-08-15T23:55:25.243208" level="INFO">Repeating keyword, round 100/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.245746" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.245501" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.245457" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.246686" level="INFO">${current_Date} = 2026-08-15 23:55:25.247</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.246334" elapsed="0.000411"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.247834" level="INFO">${ellapsed_seconds} = 2665.09</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.247113" elapsed="0.000783"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.248587" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.248057" elapsed="0.000654"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.248015" elapsed="0.000750"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.244967" elapsed="0.003987"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.250111" level="INFO">${number} = 100</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.249287" elapsed="0.000851"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.251537" level="INFO">${number} = 100</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.251199" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.253538" level="INFO">${device-port} = 17929</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.252712" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.256085" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.288779" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.289064" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.255988" elapsed="0.033135"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.290035" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:25.290169" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.255277" elapsed="0.035617"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.291741" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17929 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.360763" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.361115" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.291253" elapsed="0.069920"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.361312" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:55:25.361780" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.254867" elapsed="0.107071"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.362556" elapsed="0.000948"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.254074" elapsed="0.109624"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.252265" elapsed="0.111673"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.251722" elapsed="0.112321"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.250738" elapsed="0.113433"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.250293" elapsed="0.113976"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.367991" level="INFO">${next} = 17930</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.364619" elapsed="0.003415"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.368904" level="INFO">${current_port} = 17930</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.368291" elapsed="0.000675"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.243638" elapsed="0.125413"/>
</kw>
<msg time="2026-08-15T23:55:25.369108" level="INFO">Repeating keyword, round 101/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.371370" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.371208" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.371178" elapsed="0.000283"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.371925" level="INFO">${current_Date} = 2026-08-15 23:55:25.372</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.371668" elapsed="0.000295"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.372620" level="INFO">${ellapsed_seconds} = 2664.965</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.372173" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.373146" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.372754" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.372727" elapsed="0.000530"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.370864" elapsed="0.002456"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.374163" level="INFO">${number} = 101</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.373523" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.376085" level="INFO">${number} = 101</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.375725" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.378149" level="INFO">${device-port} = 17930</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.377335" elapsed="0.000896"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.380970" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.412953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.413194" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.380608" elapsed="0.032648"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.414200" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:25.414339" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.379930" elapsed="0.035222"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.416032" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17930 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.480948" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.481168" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.415507" elapsed="0.065717"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.481338" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:25.481745" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.379501" elapsed="0.102400"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.482465" elapsed="0.000884"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.378681" elapsed="0.104857"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.376883" elapsed="0.106843"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.376271" elapsed="0.107601"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.375072" elapsed="0.108930"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.374422" elapsed="0.109676"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.485246" level="INFO">${next} = 17931</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.484442" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.486571" level="INFO">${current_port} = 17931</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.485666" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.370009" elapsed="0.116864"/>
</kw>
<msg time="2026-08-15T23:55:25.486991" level="INFO">Repeating keyword, round 102/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.489718" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.489451" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.489407" elapsed="0.000492"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.490402" level="INFO">${current_Date} = 2026-08-15 23:55:25.490</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.490167" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.491146" level="INFO">${ellapsed_seconds} = 2664.847</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.490664" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.491632" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.491288" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.491262" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.488871" elapsed="0.002963"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.492563" level="INFO">${number} = 102</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.492045" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.494658" level="INFO">${number} = 102</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.494180" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.497548" level="INFO">${device-port} = 17931</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.496346" elapsed="0.001318"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.501524" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.536637" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.536923" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.501104" elapsed="0.035881"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.537936" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:25.538075" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.500040" elapsed="0.038753"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.539688" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17931 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.604473" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.604707" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.539199" elapsed="0.065566"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.604922" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:25.605349" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.499440" elapsed="0.106016"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.606059" elapsed="0.000905"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.498323" elapsed="0.108832"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.495677" elapsed="0.111665"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.494939" elapsed="0.112505"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.493493" elapsed="0.114076"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.492860" elapsed="0.114808"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.608884" level="INFO">${next} = 17932</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.608058" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.610223" level="INFO">${current_port} = 17932</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.609313" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.487506" elapsed="0.122949"/>
</kw>
<msg time="2026-08-15T23:55:25.610544" level="INFO">Repeating keyword, round 103/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.613131" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.612955" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.612905" elapsed="0.000292"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.613517" level="INFO">${current_Date} = 2026-08-15 23:55:25.613</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.613345" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.614041" level="INFO">${ellapsed_seconds} = 2664.724</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.613692" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.614391" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.614138" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.614119" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.612316" elapsed="0.002199"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.615043" level="INFO">${number} = 103</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.614660" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.616475" level="INFO">${number} = 103</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.616136" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.618479" level="INFO">${device-port} = 17932</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.617671" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.621241" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.652369" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.652594" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.621143" elapsed="0.031532"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.653603" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:25.653737" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.620282" elapsed="0.034193"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.655334" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17932 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.720494" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.720766" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.654851" elapsed="0.066011"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.720990" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:25.721425" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.619859" elapsed="0.101677"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.722168" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.619020" elapsed="0.104258"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.617228" elapsed="0.106244"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.616679" elapsed="0.106895"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.615674" elapsed="0.108025"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.615225" elapsed="0.108570"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.725021" level="INFO">${next} = 17933</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.724189" elapsed="0.000893"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.726348" level="INFO">${current_port} = 17933</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.725443" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.611028" elapsed="0.115542"/>
</kw>
<msg time="2026-08-15T23:55:25.726660" level="INFO">Repeating keyword, round 104/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.729227" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.729111" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.729090" elapsed="0.000201"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.729651" level="INFO">${current_Date} = 2026-08-15 23:55:25.730</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.729482" elapsed="0.000195"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.730191" level="INFO">${ellapsed_seconds} = 2664.607</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.729846" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.730543" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.730288" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.730270" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.728509" elapsed="0.002157"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.731195" level="INFO">${number} = 104</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.730828" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.732641" level="INFO">${number} = 104</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.732285" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.734681" level="INFO">${device-port} = 17933</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.733897" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.737449" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.765040" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.765276" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.737350" elapsed="0.027985"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.766252" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:25.766387" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.736468" elapsed="0.030663"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.768006" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17933 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.826774" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.827024" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.767486" elapsed="0.059593"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.827190" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:25.827594" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.736061" elapsed="0.091643"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.828310" elapsed="0.000974"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.735232" elapsed="0.094245"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.733425" elapsed="0.096242"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.732845" elapsed="0.096924"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.731837" elapsed="0.098109"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.731376" elapsed="0.098670"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.831182" level="INFO">${next} = 17934</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.830395" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.832505" level="INFO">${current_port} = 17934</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.831604" elapsed="0.001047"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.727222" elapsed="0.105558"/>
</kw>
<msg time="2026-08-15T23:55:25.832946" level="INFO">Repeating keyword, round 105/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.834519" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.834368" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.834342" elapsed="0.000265"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.835054" level="INFO">${current_Date} = 2026-08-15 23:55:25.835</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.834832" elapsed="0.000259"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.835722" level="INFO">${ellapsed_seconds} = 2664.502</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.835295" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.836218" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.835878" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.835851" elapsed="0.000476"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.834038" elapsed="0.002351"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.837133" level="INFO">${number} = 105</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.836609" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.839147" level="INFO">${number} = 105</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.838640" elapsed="0.000551"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.847206" level="INFO">${device-port} = 17934</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.846149" elapsed="0.001150"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.850863" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.880338" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.880597" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.850725" elapsed="0.029934"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.881625" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:25.881758" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.849228" elapsed="0.033356"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.883437" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17934 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:25.948962" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.949199" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.882958" elapsed="0.066296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:25.949375" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:25.949861" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.848712" elapsed="0.101266"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:25.950555" elapsed="0.000930"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.847837" elapsed="0.103836"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.840198" elapsed="0.111714"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.839413" elapsed="0.112601"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.838021" elapsed="0.114118"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.837383" elapsed="0.114851"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.953299" level="INFO">${next} = 17935</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.952636" elapsed="0.000701"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.954144" level="INFO">${current_port} = 17935</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:25.953567" elapsed="0.000636"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.833236" elapsed="0.121047"/>
</kw>
<msg time="2026-08-15T23:55:25.954338" level="INFO">Repeating keyword, round 106/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:25.956104" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:25.955939" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.955911" elapsed="0.000283"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.956729" level="INFO">${current_Date} = 2026-08-15 23:55:25.957</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:25.956466" elapsed="0.000303"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:25.957457" level="INFO">${ellapsed_seconds} = 2664.38</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:25.957002" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.957960" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:25.957593" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:25.957568" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:25.955555" elapsed="0.002579"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.958866" level="INFO">${number} = 106</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.958341" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.961079" level="INFO">${number} = 106</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.960578" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:25.963938" level="INFO">${device-port} = 17935</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:25.962779" elapsed="0.001275"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.969721" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:25.996528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:25.996770" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.969618" elapsed="0.027252"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:25.997765" elapsed="0.000090"/>
</kw>
<msg time="2026-08-15T23:55:25.997938" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:25.966099" elapsed="0.032567"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:25.999547" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17935 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.069166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.069399" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:25.999062" elapsed="0.070393"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.069570" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:26.070047" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:25.965658" elapsed="0.104502"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.070726" elapsed="0.001020"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:25.964714" elapsed="0.107270"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:25.962100" elapsed="0.110153"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:25.961336" elapsed="0.111032"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.959930" elapsed="0.112647"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:25.959193" elapsed="0.113482"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.073503" level="INFO">${next} = 17936</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.072999" elapsed="0.000542"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.074412" level="INFO">${current_port} = 17936</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.073769" elapsed="0.000704"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:25.954691" elapsed="0.119864"/>
</kw>
<msg time="2026-08-15T23:55:26.074759" level="INFO">Repeating keyword, round 107/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.076411" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.076254" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.076227" elapsed="0.000304"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.076992" level="INFO">${current_Date} = 2026-08-15 23:55:26.077</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.076737" elapsed="0.000293"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.077682" level="INFO">${ellapsed_seconds} = 2664.26</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.077236" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.078186" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.077838" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.077790" elapsed="0.000507"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.075919" elapsed="0.002440"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.079096" level="INFO">${number} = 107</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.078561" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.081217" level="INFO">${number} = 107</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.080838" elapsed="0.000407"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.083222" level="INFO">${device-port} = 17936</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.082423" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.124927" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.138247" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.138549" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.085705" elapsed="0.052906"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.139778" elapsed="0.000097"/>
</kw>
<msg time="2026-08-15T23:55:26.139959" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.085026" elapsed="0.055810"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.141828" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17936 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.208908" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.209128" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.141252" elapsed="0.067931"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.209298" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:26.209741" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.084587" elapsed="0.125308"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.210461" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.083748" elapsed="0.127867"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.081972" elapsed="0.129879"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.081413" elapsed="0.130546"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.080077" elapsed="0.132010"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.079352" elapsed="0.132830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.215660" level="INFO">${next} = 17937</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.214710" elapsed="0.001012"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.217043" level="INFO">${current_port} = 17937</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.216123" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.075086" elapsed="0.142820"/>
</kw>
<msg time="2026-08-15T23:55:26.217999" level="INFO">Repeating keyword, round 108/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.220673" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.220413" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.220321" elapsed="0.000534"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.221272" level="INFO">${current_Date} = 2026-08-15 23:55:26.221</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.221094" elapsed="0.000204"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.221784" level="INFO">${ellapsed_seconds} = 2664.116</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.221448" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.222163" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.221897" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.221879" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.219789" elapsed="0.002501"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.222819" level="INFO">${number} = 108</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.222437" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.224264" level="INFO">${number} = 108</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.223919" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.226283" level="INFO">${device-port} = 17937</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.225492" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.229053" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.260971" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.261196" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.228936" elapsed="0.032320"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.262182" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:26.262319" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.228055" elapsed="0.034998"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.263932" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17937 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.332740" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.333007" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.263413" elapsed="0.069656"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.333200" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:55:26.333676" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.227616" elapsed="0.106240"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.334592" elapsed="0.001063"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.226829" elapsed="0.109111"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.225047" elapsed="0.111165"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.224478" elapsed="0.111939"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.223450" elapsed="0.113111"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.223003" elapsed="0.113660"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.338199" level="INFO">${next} = 17938</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.337343" elapsed="0.000925"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.339689" level="INFO">${current_port} = 17938</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.338654" elapsed="0.001135"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.218473" elapsed="0.121502"/>
</kw>
<msg time="2026-08-15T23:55:26.340071" level="INFO">Repeating keyword, round 109/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.343231" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.342936" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.342797" elapsed="0.000659"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.344208" level="INFO">${current_Date} = 2026-08-15 23:55:26.344</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.343833" elapsed="0.000435"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.345147" level="INFO">${ellapsed_seconds} = 2663.993</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.344658" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.345499" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.345244" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.345225" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.342253" elapsed="0.003369"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.346153" level="INFO">${number} = 109</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.345768" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.347600" level="INFO">${number} = 109</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.347257" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.349603" level="INFO">${device-port} = 17938</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.348797" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.352726" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.384906" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.385140" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.352623" elapsed="0.032578"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.386141" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:26.386281" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.351929" elapsed="0.035153"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.388011" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17938 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.452547" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.452770" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.387471" elapsed="0.065394"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.452986" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:26.453398" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.350951" elapsed="0.102559"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.454133" elapsed="0.000897"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.350143" elapsed="0.105082"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.348349" elapsed="0.107067"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.347788" elapsed="0.107730"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.346786" elapsed="0.108856"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.346337" elapsed="0.109399"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.456963" level="INFO">${next} = 17939</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.456130" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.458291" level="INFO">${current_port} = 17939</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.457387" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.340664" elapsed="0.117850"/>
</kw>
<msg time="2026-08-15T23:55:26.458599" level="INFO">Repeating keyword, round 110/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.461194" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.461041" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.461009" elapsed="0.000277"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.461765" level="INFO">${current_Date} = 2026-08-15 23:55:26.462</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.461540" elapsed="0.000283"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.462467" level="INFO">${ellapsed_seconds} = 2663.875</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.462035" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.462955" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.462602" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.462576" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.460467" elapsed="0.002665"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.463872" level="INFO">${number} = 110</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.463338" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.465919" level="INFO">${number} = 110</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.465422" elapsed="0.000535"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.468690" level="INFO">${device-port} = 17939</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.467557" elapsed="0.001273"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.472332" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.504425" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.504681" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.472203" elapsed="0.032538"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.505708" elapsed="0.000081"/>
</kw>
<msg time="2026-08-15T23:55:26.505902" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.471448" elapsed="0.035161"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.507523" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17939 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.572631" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.572929" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.507002" elapsed="0.065988"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.573125" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:55:26.573592" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.470972" elapsed="0.102731"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.574345" elapsed="0.000945"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.469443" elapsed="0.106041"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.466933" elapsed="0.108747"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.466179" elapsed="0.109606"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.464777" elapsed="0.111188"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.464130" elapsed="0.111934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.577254" level="INFO">${next} = 17940</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.576439" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.578595" level="INFO">${current_port} = 17940</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.577680" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.459085" elapsed="0.119796"/>
</kw>
<msg time="2026-08-15T23:55:26.578976" level="INFO">Repeating keyword, round 111/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.581558" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.581312" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.581267" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.582422" level="INFO">${current_Date} = 2026-08-15 23:55:26.582</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.582062" elapsed="0.000419"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.583538" level="INFO">${ellapsed_seconds} = 2663.755</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.582839" elapsed="0.000756"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.584394" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.583751" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.583709" elapsed="0.000869"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.580741" elapsed="0.003940"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.585444" level="INFO">${number} = 111</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.585070" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.587012" level="INFO">${number} = 111</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.586648" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.589034" level="INFO">${device-port} = 17940</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.588226" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.591872" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.624529" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.624759" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.591744" elapsed="0.033114"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.625780" elapsed="0.000095"/>
</kw>
<msg time="2026-08-15T23:55:26.625957" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.591069" elapsed="0.035629"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.627570" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17940 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.697046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.697288" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.627081" elapsed="0.070272"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.697504" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:26.697994" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.590623" elapsed="0.107487"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.698691" elapsed="0.000941"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.589564" elapsed="0.110302"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.587734" elapsed="0.112339"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.587199" elapsed="0.113011"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.586201" elapsed="0.114139"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.585627" elapsed="0.114810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.701623" level="INFO">${next} = 17941</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.700784" elapsed="0.000902"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.703030" level="INFO">${current_port} = 17941</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.702115" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.579424" elapsed="0.123839"/>
</kw>
<msg time="2026-08-15T23:55:26.703352" level="INFO">Repeating keyword, round 112/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.706034" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.705724" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.705680" elapsed="0.000499"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.707014" level="INFO">${current_Date} = 2026-08-15 23:55:26.707</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.706595" elapsed="0.000481"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.708280" level="INFO">${ellapsed_seconds} = 2663.63</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.707413" elapsed="0.000938"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.709136" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.708541" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.708497" elapsed="0.000724"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.705156" elapsed="0.004112"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.709824" level="INFO">${number} = 112</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.709428" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.711295" level="INFO">${number} = 112</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.710949" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.713369" level="INFO">${device-port} = 17941</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.712543" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.716240" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.748691" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.748969" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.716139" elapsed="0.032890"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.750234" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:26.750384" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.715421" elapsed="0.035808"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.752213" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17941 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.816580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.816841" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.751597" elapsed="0.065304"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.817021" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:26.817457" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.715002" elapsed="0.102568"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.818193" elapsed="0.000968"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.713932" elapsed="0.105436"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.712058" elapsed="0.107531"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.711482" elapsed="0.108217"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.710470" elapsed="0.109415"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.710011" elapsed="0.109984"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.821257" level="INFO">${next} = 17942</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.820404" elapsed="0.000914"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.822675" level="INFO">${current_port} = 17942</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.821715" elapsed="0.001068"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.703793" elapsed="0.119191"/>
</kw>
<msg time="2026-08-15T23:55:26.823075" level="INFO">Repeating keyword, round 113/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.825758" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.825510" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.825466" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.826627" level="INFO">${current_Date} = 2026-08-15 23:55:26.826</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.826271" elapsed="0.000416"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.827751" level="INFO">${ellapsed_seconds} = 2663.511</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.827055" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.828589" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.828002" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.827959" elapsed="0.000807"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.824970" elapsed="0.003940"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.829530" level="INFO">${number} = 113</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.829160" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.830989" level="INFO">${number} = 113</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.830629" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.833003" level="INFO">${device-port} = 17942</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.832193" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.835781" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.868275" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.868389" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.835681" elapsed="0.032735"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.868868" elapsed="0.000032"/>
</kw>
<msg time="2026-08-15T23:55:26.868945" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.835010" elapsed="0.034699"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.870578" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17942 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:26.936508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.936724" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.870091" elapsed="0.066689"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:26.936931" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:26.937340" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.834570" elapsed="0.102881"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:26.938063" elapsed="0.000968"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.833529" elapsed="0.105714"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.831705" elapsed="0.107752"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.831176" elapsed="0.108389"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.830181" elapsed="0.109517"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.829714" elapsed="0.110128"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.941094" level="INFO">${next} = 17943</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.940253" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.942447" level="INFO">${current_port} = 17943</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:26.941534" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.823536" elapsed="0.119138"/>
</kw>
<msg time="2026-08-15T23:55:26.942759" level="INFO">Repeating keyword, round 114/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:26.945313" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:26.945158" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.945131" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.945909" level="INFO">${current_Date} = 2026-08-15 23:55:26.946</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:26.945657" elapsed="0.000289"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:26.946599" level="INFO">${ellapsed_seconds} = 2663.391</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:26.946156" elapsed="0.000489"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.947130" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:26.946747" elapsed="0.000470"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:26.946720" elapsed="0.000536"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:26.944641" elapsed="0.002681"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.948123" level="INFO">${number} = 114</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.947536" elapsed="0.000626"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.950168" level="INFO">${number} = 114</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.949672" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:26.953023" level="INFO">${device-port} = 17943</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:26.951829" elapsed="0.001304"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.955775" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:26.988648" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:26.989020" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.955677" elapsed="0.033408"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:26.990185" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:26.990331" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:26.955013" elapsed="0.036153"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:26.992131" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17943 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.087006" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.087233" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:26.991552" elapsed="0.095739"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.087413" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:27.087914" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:26.954567" elapsed="0.133498"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.088642" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:26.953570" elapsed="0.136226"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:26.951184" elapsed="0.138857"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:26.950428" elapsed="0.139723"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.949050" elapsed="0.141284"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:26.948388" elapsed="0.142076"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.091683" level="INFO">${next} = 17944</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.090867" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.093209" level="INFO">${current_port} = 17944</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.092301" elapsed="0.000970"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:26.943248" elapsed="0.150106"/>
</kw>
<msg time="2026-08-15T23:55:27.093411" level="INFO">Repeating keyword, round 115/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.095080" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.094924" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.094897" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.095630" level="INFO">${current_Date} = 2026-08-15 23:55:27.096</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.095392" elapsed="0.000275"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.096401" level="INFO">${ellapsed_seconds} = 2663.241</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.095904" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.096938" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.096538" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.096511" elapsed="0.000542"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.094541" elapsed="0.002579"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.097888" level="INFO">${number} = 115</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.097336" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.099985" level="INFO">${number} = 115</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.099461" elapsed="0.000563"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.102942" level="INFO">${device-port} = 17944</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.101753" elapsed="0.001301"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.106485" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.140760" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.141106" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.106385" elapsed="0.034794"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.142153" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:27.142293" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.105621" elapsed="0.037449"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.144072" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17944 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.208366" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.208675" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.143466" elapsed="0.065277"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.208945" elapsed="0.000118"/>
</return>
<msg time="2026-08-15T23:55:27.209460" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.105200" elapsed="0.104378"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.210284" elapsed="0.001183"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.103710" elapsed="0.107973"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.101081" elapsed="0.110908"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.100253" elapsed="0.111860"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.098787" elapsed="0.113463"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.098148" elapsed="0.114206"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.213612" level="INFO">${next} = 17945</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.212734" elapsed="0.000942"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.215217" level="INFO">${current_port} = 17945</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.214122" elapsed="0.001197"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.093694" elapsed="0.121764"/>
</kw>
<msg time="2026-08-15T23:55:27.215551" level="INFO">Repeating keyword, round 116/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.217791" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.217632" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.217601" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.218418" level="INFO">${current_Date} = 2026-08-15 23:55:27.218</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.218182" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.219134" level="INFO">${ellapsed_seconds} = 2663.119</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.218665" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.219663" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.219305" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.219278" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.217289" elapsed="0.002596"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.220649" level="INFO">${number} = 116</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.220126" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.222789" level="INFO">${number} = 116</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.222305" elapsed="0.000543"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.225886" level="INFO">${device-port} = 17945</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.224636" elapsed="0.001367"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.229764" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.260421" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.260528" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.229661" elapsed="0.030893"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.261075" elapsed="0.000108"/>
</kw>
<msg time="2026-08-15T23:55:27.261286" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.228951" elapsed="0.033153"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.263067" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17945 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.328674" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.328895" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.262515" elapsed="0.066433"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.329040" elapsed="0.000066"/>
</return>
<msg time="2026-08-15T23:55:27.329372" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.228288" elapsed="0.101164"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.329933" elapsed="0.000772"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.226639" elapsed="0.104394"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.223878" elapsed="0.107442"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.223075" elapsed="0.108344"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.221610" elapsed="0.109916"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.220969" elapsed="0.110637"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.332579" level="INFO">${next} = 17946</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.331958" elapsed="0.000670"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.333665" level="INFO">${current_port} = 17946</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.332977" elapsed="0.000762"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.216141" elapsed="0.117730"/>
</kw>
<msg time="2026-08-15T23:55:27.333933" level="INFO">Repeating keyword, round 117/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.335630" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.335468" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.335439" elapsed="0.000285"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.336234" level="INFO">${current_Date} = 2026-08-15 23:55:27.336</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.335995" elapsed="0.000279"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.336984" level="INFO">${ellapsed_seconds} = 2663.001</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.336496" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.337487" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.337127" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.337100" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.335105" elapsed="0.002563"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.338444" level="INFO">${number} = 117</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.337908" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.340616" level="INFO">${number} = 117</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.340119" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.342685" level="INFO">${device-port} = 17946</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.341910" elapsed="0.000857"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.345563" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.380564" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.380836" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.345459" elapsed="0.035441"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.381854" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:27.381995" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.344681" elapsed="0.038062"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.383655" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17946 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.452602" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.452855" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.383146" elapsed="0.069768"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.453029" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:27.453450" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.344269" elapsed="0.109292"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.454214" elapsed="0.000936"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.343228" elapsed="0.112118"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.341438" elapsed="0.114101"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.340905" elapsed="0.114737"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.339403" elapsed="0.116432"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.338713" elapsed="0.117228"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.457123" level="INFO">${next} = 17947</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.456291" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.458479" level="INFO">${current_port} = 17947</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.457549" elapsed="0.001025"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.334232" elapsed="0.124473"/>
</kw>
<msg time="2026-08-15T23:55:27.458790" level="INFO">Repeating keyword, round 118/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.461462" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.461217" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.461173" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.462403" level="INFO">${current_Date} = 2026-08-15 23:55:27.462</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.462043" elapsed="0.000419"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.463526" level="INFO">${ellapsed_seconds} = 2662.875</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.462794" elapsed="0.000791"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.464366" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.463790" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.463702" elapsed="0.000843"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.460636" elapsed="0.004011"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.465326" level="INFO">${number} = 118</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.464957" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.466759" level="INFO">${number} = 118</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.466422" elapsed="0.000363"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.468847" level="INFO">${device-port} = 17947</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.468041" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.471616" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.504564" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.504791" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.471517" elapsed="0.033372"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.505756" elapsed="0.000085"/>
</kw>
<msg time="2026-08-15T23:55:27.505921" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.470850" elapsed="0.035752"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.507467" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17947 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.572765" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.573041" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.506984" elapsed="0.066115"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.573211" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:27.573618" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.470410" elapsed="0.103319"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.574371" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.469381" elapsed="0.106104"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.467547" elapsed="0.108128"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.466960" elapsed="0.108888"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.465975" elapsed="0.110008"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.465508" elapsed="0.110576"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.577262" level="INFO">${next} = 17948</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.576430" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.578622" level="INFO">${current_port} = 17948</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.577683" elapsed="0.001034"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.459281" elapsed="0.119636"/>
</kw>
<msg time="2026-08-15T23:55:27.579023" level="INFO">Repeating keyword, round 119/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.581602" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.581357" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.581313" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.582512" level="INFO">${current_Date} = 2026-08-15 23:55:27.582</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.582150" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.583631" level="INFO">${ellapsed_seconds} = 2662.755</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.582939" elapsed="0.000801"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.584298" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.583946" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.583895" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.580756" elapsed="0.003667"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.584964" level="INFO">${number} = 119</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.584571" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.586410" level="INFO">${number} = 119</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.586073" elapsed="0.000363"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.588447" level="INFO">${device-port} = 17948</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.587607" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.592788" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.624558" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.624782" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.592685" elapsed="0.032199"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.625762" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:55:27.625931" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.592018" elapsed="0.034685"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.627561" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17948 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.696596" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.696862" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.627079" elapsed="0.069843"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.697043" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:27.697471" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.591532" elapsed="0.106051"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.698204" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.589006" elapsed="0.110306"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.587154" elapsed="0.112353"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.586593" elapsed="0.113021"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.585598" elapsed="0.114249"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.585146" elapsed="0.114807"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.701120" level="INFO">${next} = 17949</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.700308" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.702473" level="INFO">${current_port} = 17949</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.701541" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.579451" elapsed="0.123246"/>
</kw>
<msg time="2026-08-15T23:55:27.702785" level="INFO">Repeating keyword, round 120/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.704952" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.704775" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.704746" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.705557" level="INFO">${current_Date} = 2026-08-15 23:55:27.705</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.705327" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.706268" level="INFO">${ellapsed_seconds} = 2662.632</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.705823" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.706745" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.706404" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.706378" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.704440" elapsed="0.002505"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.707678" level="INFO">${number} = 120</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.707150" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.709708" level="INFO">${number} = 120</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.709235" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.712616" level="INFO">${device-port} = 17949</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.711463" elapsed="0.001265"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.716504" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.748497" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.748735" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.716405" elapsed="0.032391"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.749734" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:27.749906" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.715393" elapsed="0.035217"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.751561" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17949 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.816533" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.816783" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.751009" elapsed="0.065876"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.817009" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:27.817456" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.714499" elapsed="0.103072"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.818212" elapsed="0.000937"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.713388" elapsed="0.105953"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.710723" elapsed="0.108815"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.709990" elapsed="0.109752"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.708586" elapsed="0.111336"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.707963" elapsed="0.112064"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.821208" level="INFO">${next} = 17950</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.820382" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.822540" level="INFO">${current_port} = 17950</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.821630" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.703310" elapsed="0.119452"/>
</kw>
<msg time="2026-08-15T23:55:27.822909" level="INFO">Repeating keyword, round 121/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.825485" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.825240" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.825195" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.826341" level="INFO">${current_Date} = 2026-08-15 23:55:27.826</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.825988" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.827453" level="INFO">${ellapsed_seconds} = 2662.511</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.826731" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.828201" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.827715" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.827672" elapsed="0.000643"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.824674" elapsed="0.003696"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.828917" level="INFO">${number} = 121</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.828520" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.830531" level="INFO">${number} = 121</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.830178" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.832591" level="INFO">${device-port} = 17950</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.831756" elapsed="0.000919"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.835504" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.868442" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.868558" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.835394" elapsed="0.033192"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.869162" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:27.869307" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.834402" elapsed="0.035740"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.871051" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17950 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:27.940456" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.940681" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.870504" elapsed="0.070233"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:27.940894" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:27.941337" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.833981" elapsed="0.107468"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:27.942055" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.833145" elapsed="0.110046"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.831277" elapsed="0.112131"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.830719" elapsed="0.112840"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.829691" elapsed="0.114005"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.829128" elapsed="0.114666"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.945045" level="INFO">${next} = 17951</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.944193" elapsed="0.000914"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.946475" level="INFO">${current_port} = 17951</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:27.945508" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.823358" elapsed="0.123350"/>
</kw>
<msg time="2026-08-15T23:55:27.946851" level="INFO">Repeating keyword, round 122/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:27.948929" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:27.948750" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.948722" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.949530" level="INFO">${current_Date} = 2026-08-15 23:55:27.949</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:27.949283" elapsed="0.000285"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:27.950259" level="INFO">${ellapsed_seconds} = 2662.388</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:27.949779" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.950757" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:27.950398" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:27.950372" elapsed="0.000522"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:27.948405" elapsed="0.002556"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.951732" level="INFO">${number} = 122</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.951169" elapsed="0.000602"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.953856" level="INFO">${number} = 122</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.953331" elapsed="0.000565"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:27.956699" level="INFO">${device-port} = 17951</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:27.955588" elapsed="0.001243"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.960434" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:27.992360" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:27.992584" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.960335" elapsed="0.032308"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:27.993594" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:27.993735" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:27.959146" elapsed="0.035370"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:27.995416" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17951 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.060567" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.060921" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:27.994909" elapsed="0.066074"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.061129" elapsed="0.000107"/>
</return>
<msg time="2026-08-15T23:55:28.061654" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:27.958551" elapsed="0.103214"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.062463" elapsed="0.001038"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:27.957444" elapsed="0.106269"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:27.954918" elapsed="0.109052"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:27.954121" elapsed="0.109957"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.952669" elapsed="0.111543"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:27.952016" elapsed="0.112298"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.065561" level="INFO">${next} = 17952</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.064697" elapsed="0.000927"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.067003" level="INFO">${current_port} = 17952</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.066038" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:27.947293" elapsed="0.119945"/>
</kw>
<msg time="2026-08-15T23:55:28.067329" level="INFO">Repeating keyword, round 123/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.070130" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.069871" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.069791" elapsed="0.000484"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.071024" level="INFO">${current_Date} = 2026-08-15 23:55:28.071</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.070620" elapsed="0.000465"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.072097" level="INFO">${ellapsed_seconds} = 2662.266</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.071421" elapsed="0.000704"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.072452" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.072198" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.072178" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.069269" elapsed="0.003318"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.073146" level="INFO">${number} = 123</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.072753" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.074735" level="INFO">${number} = 123</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.074377" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.076838" level="INFO">${device-port} = 17952</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.075998" elapsed="0.000925"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.079713" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.115861" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.116015" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.079608" elapsed="0.036467"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.117069" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:28.117222" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.078638" elapsed="0.039375"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.118916" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17952 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.184452" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.184667" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.118387" elapsed="0.066334"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.184872" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:28.185283" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.078223" elapsed="0.107170"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.185998" elapsed="0.000876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.077385" elapsed="0.109687"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.075507" elapsed="0.111755"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.074939" elapsed="0.112423"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.073918" elapsed="0.113601"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.073330" elapsed="0.114285"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.188751" level="INFO">${next} = 17953</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.188002" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.190130" level="INFO">${current_port} = 17953</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.189230" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.067897" elapsed="0.122462"/>
</kw>
<msg time="2026-08-15T23:55:28.190445" level="INFO">Repeating keyword, round 124/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.193103" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.192853" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.192781" elapsed="0.000467"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.194037" level="INFO">${current_Date} = 2026-08-15 23:55:28.194</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.193648" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.195184" level="INFO">${ellapsed_seconds} = 2662.143</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.194430" elapsed="0.000814"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.196078" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.195473" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.195363" elapsed="0.000817"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.192295" elapsed="0.003932"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.196738" level="INFO">${number} = 124</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.196373" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.198187" level="INFO">${number} = 124</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.197848" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.200270" level="INFO">${device-port} = 17953</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.199366" elapsed="0.000985"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.203043" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.236158" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.236468" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.202945" elapsed="0.033587"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.237694" elapsed="0.000076"/>
</kw>
<msg time="2026-08-15T23:55:28.237895" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.202071" elapsed="0.036588"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.239648" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17953 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.304418" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.304647" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.239099" elapsed="0.065604"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.304863" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:55:28.305320" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.201639" elapsed="0.103792"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.306062" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.200816" elapsed="0.106387"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.198915" elapsed="0.108530"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.198374" elapsed="0.109179"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.197387" elapsed="0.110296"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.196936" elapsed="0.110845"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.309010" level="INFO">${next} = 17954</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.308178" elapsed="0.000902"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.310398" level="INFO">${current_port} = 17954</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.309459" elapsed="0.001062"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.190921" elapsed="0.119955"/>
</kw>
<msg time="2026-08-15T23:55:28.310972" level="INFO">Repeating keyword, round 125/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.313827" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.313550" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.313505" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.314659" level="INFO">${current_Date} = 2026-08-15 23:55:28.314</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.314302" elapsed="0.000418"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.315952" level="INFO">${ellapsed_seconds} = 2662.023</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.315087" elapsed="0.000893"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.316309" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.316054" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.316034" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.313015" elapsed="0.003418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.316976" level="INFO">${number} = 125</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.316586" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.318412" level="INFO">${number} = 125</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.318069" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.320481" level="INFO">${device-port} = 17954</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.319677" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.323261" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.356283" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.356521" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.323136" elapsed="0.033447"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.357533" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:28.357672" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.322241" elapsed="0.036261"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.359447" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17954 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.424502" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.424754" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.358886" elapsed="0.065963"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.424986" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:55:28.425455" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.321821" elapsed="0.103747"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.426208" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.321024" elapsed="0.106386"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.319146" elapsed="0.108465"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.318597" elapsed="0.109119"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.317608" elapsed="0.110280"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.317160" elapsed="0.110830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.429162" level="INFO">${next} = 17955</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.428341" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.430504" level="INFO">${current_port} = 17955</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.429588" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.311666" elapsed="0.119066"/>
</kw>
<msg time="2026-08-15T23:55:28.430899" level="INFO">Repeating keyword, round 126/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.432824" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.432694" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.432673" elapsed="0.000217"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.433259" level="INFO">${current_Date} = 2026-08-15 23:55:28.433</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.433086" elapsed="0.000200"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.433777" level="INFO">${ellapsed_seconds} = 2661.904</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.433435" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.434149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.433892" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.433873" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.432448" elapsed="0.001827"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.434788" level="INFO">${number} = 126</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.434420" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.436280" level="INFO">${number} = 126</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.435935" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.438299" level="INFO">${device-port} = 17955</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.437491" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.441123" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.476246" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.476475" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.441008" elapsed="0.035528"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.477517" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:55:28.477665" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.440084" elapsed="0.038396"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.479418" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17955 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.544529" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.544764" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.478875" elapsed="0.065985"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.544982" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:28.545410" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.439647" elapsed="0.105873"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.546132" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.438844" elapsed="0.108422"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.437041" elapsed="0.110421"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.436479" elapsed="0.111084"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.435470" elapsed="0.112217"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.434988" elapsed="0.112796"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.548984" level="INFO">${next} = 17956</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.548176" elapsed="0.000869"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.550311" level="INFO">${current_port} = 17956</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.549407" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.431476" elapsed="0.119062"/>
</kw>
<msg time="2026-08-15T23:55:28.550626" level="INFO">Repeating keyword, round 127/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.553246" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.553000" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.552955" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.554099" level="INFO">${current_Date} = 2026-08-15 23:55:28.554</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.553712" elapsed="0.000447"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.555257" level="INFO">${ellapsed_seconds} = 2661.783</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.554489" elapsed="0.000830"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.556066" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.555480" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.555437" elapsed="0.000745"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.552433" elapsed="0.003795"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.556737" level="INFO">${number} = 127</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.556374" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.558233" level="INFO">${number} = 127</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.557886" elapsed="0.000374"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.560215" level="INFO">${device-port} = 17956</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.559421" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.562948" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.596928" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.597153" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.562840" elapsed="0.034372"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.598134" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:28.598270" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.561962" elapsed="0.037059"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.599954" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17956 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.668545" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.668785" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.599432" elapsed="0.069448"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.669003" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:28.669436" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.561528" elapsed="0.108019"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.670178" elapsed="0.000913"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.560730" elapsed="0.110593"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.558962" elapsed="0.112556"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.558418" elapsed="0.113204"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.557387" elapsed="0.114361"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.556936" elapsed="0.114957"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.673050" level="INFO">${next} = 17957</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.672244" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.674388" level="INFO">${current_port} = 17957</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.673483" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.551111" elapsed="0.123501"/>
</kw>
<msg time="2026-08-15T23:55:28.674732" level="INFO">Repeating keyword, round 128/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.677377" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.677133" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.677089" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.678294" level="INFO">${current_Date} = 2026-08-15 23:55:28.678</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.678118" elapsed="0.000203"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.678792" level="INFO">${ellapsed_seconds} = 2661.659</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.678473" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.679173" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.678906" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.678888" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.676554" elapsed="0.002745"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.679830" level="INFO">${number} = 128</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.679445" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.681272" level="INFO">${number} = 128</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.680927" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.683327" level="INFO">${device-port} = 17957</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.682462" elapsed="0.000949"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.686129" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.720980" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.721210" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.686024" elapsed="0.035245"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.722186" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:28.722322" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.685134" elapsed="0.037918"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.723980" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17957 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.792586" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.792839" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.723462" elapsed="0.069437"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.793010" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:28.793411" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.684697" elapsed="0.108823"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.794125" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.683884" elapsed="0.111349"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.682013" elapsed="0.113411"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.681464" elapsed="0.114060"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.680467" elapsed="0.115180"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.680020" elapsed="0.115724"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.796922" level="INFO">${next} = 17958</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.796134" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.798228" level="INFO">${current_port} = 17958</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.797344" elapsed="0.000981"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.675241" elapsed="0.123211"/>
</kw>
<msg time="2026-08-15T23:55:28.798538" level="INFO">Repeating keyword, round 129/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.801091" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.800847" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.800776" elapsed="0.000456"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.801933" level="INFO">${current_Date} = 2026-08-15 23:55:28.802</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.801560" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.803032" level="INFO">${ellapsed_seconds} = 2661.535</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.802320" elapsed="0.000825"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.803910" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.803339" elapsed="0.000717"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.803292" elapsed="0.000827"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.800288" elapsed="0.003887"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.804686" level="INFO">${number} = 129</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.804321" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.806269" level="INFO">${number} = 129</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.805848" elapsed="0.000448"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.808280" level="INFO">${device-port} = 17958</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.807482" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.811048" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.844667" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.845484" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.810943" elapsed="0.034606"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.846569" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:28.846706" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.810070" elapsed="0.037495"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.848468" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17958 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:28.912556" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.912773" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.847963" elapsed="0.064907"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:28.912989" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:28.913421" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.809606" elapsed="0.103923"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:28.914142" elapsed="0.001153"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.808822" elapsed="0.106671"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.807005" elapsed="0.108681"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.806455" elapsed="0.109334"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.805374" elapsed="0.110595"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.804882" elapsed="0.111186"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.917233" level="INFO">${next} = 17959</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.916418" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.918670" level="INFO">${current_port} = 17959</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:28.917667" elapsed="0.001111"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.799014" elapsed="0.119968"/>
</kw>
<msg time="2026-08-15T23:55:28.919123" level="INFO">Repeating keyword, round 130/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:28.921919" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:28.921598" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.921552" elapsed="0.000524"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.923078" level="INFO">${current_Date} = 2026-08-15 23:55:28.923</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:28.922575" elapsed="0.000584"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:28.924240" level="INFO">${ellapsed_seconds} = 2661.414</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:28.923542" elapsed="0.000725"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.924596" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:28.924338" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:28.924320" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:28.920992" elapsed="0.003729"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.925247" level="INFO">${number} = 130</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.924882" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.926692" level="INFO">${number} = 130</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.926351" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:28.928734" level="INFO">${device-port} = 17959</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:28.927951" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.931529" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:28.964720" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:28.965012" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.931423" elapsed="0.033670"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:28.966018" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:28.966157" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:28.930496" elapsed="0.036377"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:28.967758" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17959 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.032550" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.032766" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:28.967273" elapsed="0.065587"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.032973" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:29.033384" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:28.930084" elapsed="0.103410"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.034114" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:28.929277" elapsed="0.105965"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:28.927457" elapsed="0.107976"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:28.926899" elapsed="0.108635"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.925889" elapsed="0.109770"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:28.925429" elapsed="0.110327"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.036947" level="INFO">${next} = 17960</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.036151" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.038478" level="INFO">${current_port} = 17960</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.037533" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:28.919566" elapsed="0.119144"/>
</kw>
<msg time="2026-08-15T23:55:29.038860" level="INFO">Repeating keyword, round 131/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.041465" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.041216" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.041172" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.042402" level="INFO">${current_Date} = 2026-08-15 23:55:29.042</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.041968" elapsed="0.000500"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.043733" level="INFO">${ellapsed_seconds} = 2661.295</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.042841" elapsed="0.000954"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.044242" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.043987" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.043951" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.040648" elapsed="0.003718"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.044906" level="INFO">${number} = 131</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.044513" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.046393" level="INFO">${number} = 131</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.046048" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.048422" level="INFO">${device-port} = 17960</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.047615" elapsed="0.000896"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.053127" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.084675" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.084939" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.053009" elapsed="0.031991"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.085917" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:29.086052" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.050214" elapsed="0.036636"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.087717" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17960 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.153285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.153515" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.087234" elapsed="0.066336"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.153681" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:29.154144" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.049780" elapsed="0.104475"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.154860" elapsed="0.001007"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.048980" elapsed="0.107108"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.047167" elapsed="0.109140"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.046583" elapsed="0.109833"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.045573" elapsed="0.110984"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.045089" elapsed="0.111583"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.157931" level="INFO">${next} = 17961</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.157067" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.159319" level="INFO">${current_port} = 17961</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.158361" elapsed="0.001058"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.039360" elapsed="0.120192"/>
</kw>
<msg time="2026-08-15T23:55:29.159639" level="INFO">Repeating keyword, round 132/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.162242" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.161996" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.161951" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.163314" level="INFO">${current_Date} = 2026-08-15 23:55:29.163</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.162791" elapsed="0.000586"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.164200" level="INFO">${ellapsed_seconds} = 2661.174</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.163721" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.164545" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.164299" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.164280" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.161419" elapsed="0.003250"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.165201" level="INFO">${number} = 132</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.164830" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.166648" level="INFO">${number} = 132</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.166308" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.168649" level="INFO">${device-port} = 17961</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.167872" elapsed="0.000857"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.171393" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.208595" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.208883" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.171294" elapsed="0.037672"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.209985" elapsed="0.000079"/>
</kw>
<msg time="2026-08-15T23:55:29.210152" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.170412" elapsed="0.040568"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.211870" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17961 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.276567" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.276854" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.211353" elapsed="0.065566"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.277042" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:29.277486" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.170000" elapsed="0.107598"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.278234" elapsed="0.000985"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.169187" elapsed="0.110224"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.167405" elapsed="0.112199"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.166851" elapsed="0.112856"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.165862" elapsed="0.114020"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.165389" elapsed="0.114597"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.281145" level="INFO">${next} = 17962</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.280334" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.282492" level="INFO">${current_port} = 17962</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.281575" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.160126" elapsed="0.122588"/>
</kw>
<msg time="2026-08-15T23:55:29.282893" level="INFO">Repeating keyword, round 133/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.285053" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.284894" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.284865" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.285573" level="INFO">${current_Date} = 2026-08-15 23:55:29.285</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.285352" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.286272" level="INFO">${ellapsed_seconds} = 2661.052</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.285840" elapsed="0.000468"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.286772" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.286406" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.286379" elapsed="0.000574"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.284535" elapsed="0.002484"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.287739" level="INFO">${number} = 133</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.287227" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.289772" level="INFO">${number} = 133</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.289285" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.292577" level="INFO">${device-port} = 17962</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.291451" elapsed="0.001238"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.296387" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.332342" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.332545" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.296093" elapsed="0.036510"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.333525" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:29.333657" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.295111" elapsed="0.039302"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.335301" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17962 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.400760" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.401008" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.334761" elapsed="0.066302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.401173" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:29.401578" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.294465" elapsed="0.107226"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.402291" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.293339" elapsed="0.110068"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.290781" elapsed="0.112816"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.290052" elapsed="0.113646"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.288649" elapsed="0.115218"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.288022" elapsed="0.115947"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.405103" level="INFO">${next} = 17963</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.404314" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.406415" level="INFO">${current_port} = 17963</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.405526" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.283346" elapsed="0.123290"/>
</kw>
<msg time="2026-08-15T23:55:29.406720" level="INFO">Repeating keyword, round 134/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.409262" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.409023" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.408981" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.410225" level="INFO">${current_Date} = 2026-08-15 23:55:29.410</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.409935" elapsed="0.000317"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.410704" level="INFO">${ellapsed_seconds} = 2660.927</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.410401" elapsed="0.000330"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.411098" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.410838" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.410783" elapsed="0.000401"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.408463" elapsed="0.002766"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.411754" level="INFO">${number} = 134</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.411381" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.413203" level="INFO">${number} = 134</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.412864" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.415398" level="INFO">${device-port} = 17963</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.414389" elapsed="0.001091"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.417949" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.448729" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.448991" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.417847" elapsed="0.031205"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.449957" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:29.450093" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.417150" elapsed="0.033673"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.451686" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17963 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.517097" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.517342" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.451200" elapsed="0.066198"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.517520" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:55:29.518007" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.416718" elapsed="0.101399"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.518704" elapsed="0.000969"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.415942" elapsed="0.103960"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.413938" elapsed="0.106159"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.413397" elapsed="0.106802"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.412407" elapsed="0.107919"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.411957" elapsed="0.108467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.521576" level="INFO">${next} = 17964</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.520774" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.522980" level="INFO">${current_port} = 17964</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.522051" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.407214" elapsed="0.115996"/>
</kw>
<msg time="2026-08-15T23:55:29.523297" level="INFO">Repeating keyword, round 135/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.525892" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.525613" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.525568" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.526713" level="INFO">${current_Date} = 2026-08-15 23:55:29.527</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.526363" elapsed="0.000494"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.527512" level="INFO">${ellapsed_seconds} = 2660.81</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.527187" elapsed="0.000351"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.527872" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.527610" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.527590" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.525075" elapsed="0.002923"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.528505" level="INFO">${number} = 135</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.528143" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.529975" level="INFO">${number} = 135</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.529602" elapsed="0.000400"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.532018" level="INFO">${device-port} = 17964</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.531210" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.534589" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.568429" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.568650" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.534484" elapsed="0.034224"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.569635" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:29.569769" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.533786" elapsed="0.036745"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.571416" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17964 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.656196" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.656417" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.570932" elapsed="0.085538"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.656586" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:29.657029" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.533360" elapsed="0.123771"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.657683" elapsed="0.000845"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.532546" elapsed="0.126208"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.530695" elapsed="0.128289"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.530166" elapsed="0.128940"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.529154" elapsed="0.130055"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.528688" elapsed="0.130585"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.660028" level="INFO">${next} = 17965</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.659496" elapsed="0.000574"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.660898" level="INFO">${current_port} = 17965</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.660303" elapsed="0.000664"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.523738" elapsed="0.137317"/>
</kw>
<msg time="2026-08-15T23:55:29.661114" level="INFO">Repeating keyword, round 136/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.662881" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.662649" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.662616" elapsed="0.000363"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.663510" level="INFO">${current_Date} = 2026-08-15 23:55:29.663</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.663267" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.664251" level="INFO">${ellapsed_seconds} = 2660.674</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.663768" elapsed="0.000521"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.664740" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.664389" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.664363" elapsed="0.000517"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.662302" elapsed="0.002647"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.665682" level="INFO">${number} = 136</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.665160" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.667781" level="INFO">${number} = 136</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.667286" elapsed="0.000554"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.670611" level="INFO">${device-port} = 17965</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.669503" elapsed="0.001237"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.674629" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.708623" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.708899" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.674213" elapsed="0.034750"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.709905" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:29.710046" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.673171" elapsed="0.037712"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.711762" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17965 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.766845" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.767064" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.711274" elapsed="0.055845"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.767235" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:29.767659" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.672521" elapsed="0.095247"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.768385" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.671385" elapsed="0.098093"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.668860" elapsed="0.100809"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.668072" elapsed="0.101698"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.666602" elapsed="0.103343"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.665962" elapsed="0.104082"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.771225" level="INFO">${next} = 17966</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.770390" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.772587" level="INFO">${current_port} = 17966</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.771664" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.661419" elapsed="0.111453"/>
</kw>
<msg time="2026-08-15T23:55:29.772965" level="INFO">Repeating keyword, round 137/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.775341" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.775230" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.775211" elapsed="0.000194"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.775716" level="INFO">${current_Date} = 2026-08-15 23:55:29.776</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.775551" elapsed="0.000191"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.776229" level="INFO">${ellapsed_seconds} = 2660.561</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.775908" elapsed="0.000348"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.776574" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.776325" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.776307" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.774723" elapsed="0.001974"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.777221" level="INFO">${number} = 137</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.776857" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.778679" level="INFO">${number} = 137</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.778309" elapsed="0.000397"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.780665" level="INFO">${device-port} = 17966</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.779871" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.783400" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.820629" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.820902" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.783295" elapsed="0.037672"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.821966" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:29.822107" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.782436" elapsed="0.040595"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.824019" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17966 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:29.888838" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.889066" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.823383" elapsed="0.065739"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:29.889232" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:29.889641" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.782019" elapsed="0.107734"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:29.890398" elapsed="0.000989"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.781206" elapsed="0.110377"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.779402" elapsed="0.112375"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.778878" elapsed="0.113055"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.777859" elapsed="0.114199"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.777402" elapsed="0.114763"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.893342" level="INFO">${next} = 17967</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.892511" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.894739" level="INFO">${current_port} = 17967</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:29.893784" elapsed="0.001118"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.773391" elapsed="0.121645"/>
</kw>
<msg time="2026-08-15T23:55:29.895123" level="INFO">Repeating keyword, round 138/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:29.897698" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:29.897440" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.897397" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.898705" level="INFO">${current_Date} = 2026-08-15 23:55:29.898</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:29.898284" elapsed="0.000495"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:29.899580" level="INFO">${ellapsed_seconds} = 2660.439</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:29.899148" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.900081" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:29.899717" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:29.899691" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:29.896904" elapsed="0.003352"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.901009" level="INFO">${number} = 138</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.900461" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.903096" level="INFO">${number} = 138</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.902569" elapsed="0.000568"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:29.905941" level="INFO">${device-port} = 17967</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:29.904775" elapsed="0.001283"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.909938" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:29.940594" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:29.940855" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.909680" elapsed="0.031239"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:29.941794" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:55:29.941962" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:29.908451" elapsed="0.034257"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:29.943585" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17967 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.008768" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.009033" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:29.943094" elapsed="0.065995"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.009202" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:30.009637" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:29.907874" elapsed="0.101877"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.010375" elapsed="0.001113"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:29.906715" elapsed="0.104965"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:29.904128" elapsed="0.107781"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:29.903372" elapsed="0.108641"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.901908" elapsed="0.110227"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:29.901263" elapsed="0.110968"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.013445" level="INFO">${next} = 17968</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.012574" elapsed="0.000931"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.014785" level="INFO">${current_port} = 17968</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.013915" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:29.895569" elapsed="0.119514"/>
</kw>
<msg time="2026-08-15T23:55:30.015176" level="INFO">Repeating keyword, round 139/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.017611" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.017461" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.017432" elapsed="0.000268"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.018135" level="INFO">${current_Date} = 2026-08-15 23:55:30.018</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.017923" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.018841" level="INFO">${ellapsed_seconds} = 2660.319</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.018377" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.019309" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.018978" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.018952" elapsed="0.000474"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.017113" elapsed="0.002377"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.020227" level="INFO">${number} = 139</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.019692" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.022259" level="INFO">${number} = 139</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.021769" elapsed="0.000527"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.025156" level="INFO">${device-port} = 17968</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.024005" elapsed="0.001267"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.028623" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.061221" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.061456" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.028515" elapsed="0.033010"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.062539" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:30.062699" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.027614" elapsed="0.035846"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.064330" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17968 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.133199" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.133419" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.063840" elapsed="0.069635"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.133601" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:30.134052" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.027194" elapsed="0.106971"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.134846" elapsed="0.000853"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.025960" elapsed="0.109971"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.023318" elapsed="0.112807"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.022555" elapsed="0.113673"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.021131" elapsed="0.115227"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.020491" elapsed="0.115965"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.137608" level="INFO">${next} = 17969</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.136850" elapsed="0.000820"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.139000" level="INFO">${current_port} = 17969</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.138088" elapsed="0.000973"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.015606" elapsed="0.123539"/>
</kw>
<msg time="2026-08-15T23:55:30.139199" level="INFO">Repeating keyword, round 140/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.140781" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.140618" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.140593" elapsed="0.000300"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.141359" level="INFO">${current_Date} = 2026-08-15 23:55:30.141</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.141142" elapsed="0.000254"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.142060" level="INFO">${ellapsed_seconds} = 2660.196</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.141606" elapsed="0.000491"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.142539" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.142195" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.142170" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.140287" elapsed="0.002427"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.143452" level="INFO">${number} = 140</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.142941" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.145475" level="INFO">${number} = 140</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.145004" elapsed="0.000508"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.148277" level="INFO">${device-port} = 17969</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.147164" elapsed="0.001223"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.151884" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.184549" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.184783" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.151701" elapsed="0.033178"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.185760" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:55:30.185930" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.150758" elapsed="0.035995"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.187633" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17969 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.257516" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.257754" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.187149" elapsed="0.070700"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.257973" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:30.258428" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.150133" elapsed="0.108410"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.259166" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.149029" elapsed="0.111241"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.146490" elapsed="0.113971"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.145731" elapsed="0.114833"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.144362" elapsed="0.116331"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.143705" elapsed="0.117085"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.262007" level="INFO">${next} = 17970</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.261191" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.263394" level="INFO">${current_port} = 17970</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.262488" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.139462" elapsed="0.124156"/>
</kw>
<msg time="2026-08-15T23:55:30.263704" level="INFO">Repeating keyword, round 141/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.266275" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.266030" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.265987" elapsed="0.000479"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.267175" level="INFO">${current_Date} = 2026-08-15 23:55:30.267</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.266792" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.267666" level="INFO">${ellapsed_seconds} = 2660.07</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.267352" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.268023" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.267764" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.267745" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.265470" elapsed="0.002679"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.268659" level="INFO">${number} = 141</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.268294" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.270119" level="INFO">${number} = 141</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.269757" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.272187" level="INFO">${device-port} = 17970</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.271312" elapsed="0.000954"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.274988" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.312783" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.313057" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.274881" elapsed="0.038235"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.314053" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:30.314190" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.273953" elapsed="0.041120"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.315968" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17970 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.385386" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.385603" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.315427" elapsed="0.070230"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.385770" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:55:30.386244" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.273518" elapsed="0.112890"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.387044" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.272703" elapsed="0.115443"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.270866" elapsed="0.117472"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.270302" elapsed="0.118136"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.269306" elapsed="0.119256"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.268855" elapsed="0.119803"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.389868" level="INFO">${next} = 17971</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.389070" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.391220" level="INFO">${current_port} = 17971</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.390323" elapsed="0.000993"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.264196" elapsed="0.127248"/>
</kw>
<msg time="2026-08-15T23:55:30.391529" level="INFO">Repeating keyword, round 142/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.394257" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.394015" elapsed="0.000391"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.393967" elapsed="0.000489"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.395225" level="INFO">${current_Date} = 2026-08-15 23:55:30.395</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.394910" elapsed="0.000341"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.395733" level="INFO">${ellapsed_seconds} = 2659.942</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.395400" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.396098" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.395851" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.395832" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.393450" elapsed="0.002774"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.396734" level="INFO">${number} = 142</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.396369" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.398188" level="INFO">${number} = 142</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.397841" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.400235" level="INFO">${device-port} = 17971</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.399432" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.403011" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.436792" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.437045" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.402906" elapsed="0.034198"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.437999" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:30.438135" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.402008" elapsed="0.036855"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.439696" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17971 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.508995" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.509222" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.439219" elapsed="0.070059"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.509434" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:55:30.509952" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.401575" elapsed="0.108492"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.510702" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.400760" elapsed="0.111161"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.398983" elapsed="0.113164"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.398397" elapsed="0.113854"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.397380" elapsed="0.114995"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.396933" elapsed="0.115539"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.513717" level="INFO">${next} = 17972</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.512875" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.515225" level="INFO">${current_port} = 17972</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.514308" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.392005" elapsed="0.123397"/>
</kw>
<msg time="2026-08-15T23:55:30.515466" level="INFO">Repeating keyword, round 143/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.517279" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.517118" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.517088" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.517834" level="INFO">${current_Date} = 2026-08-15 23:55:30.518</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.517582" elapsed="0.000297"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.518557" level="INFO">${ellapsed_seconds} = 2659.819</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.518088" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.519057" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.518693" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.518666" elapsed="0.000500"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.516716" elapsed="0.002514"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.519959" level="INFO">${number} = 143</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.519432" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.522741" level="INFO">${number} = 143</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.521510" elapsed="0.001280"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.525420" level="INFO">${device-port} = 17972</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.524382" elapsed="0.001144"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.531126" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.560681" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.560942" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.531017" elapsed="0.029985"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.561916" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:30.562052" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.527389" elapsed="0.035486"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.563741" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17972 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.629461" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.629597" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.563262" elapsed="0.066370"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.629702" elapsed="0.000050"/>
</return>
<msg time="2026-08-15T23:55:30.629991" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.526965" elapsed="0.103095"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.630443" elapsed="0.000571"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.526083" elapsed="0.105051"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.523829" elapsed="0.107424"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.523135" elapsed="0.108182"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.520857" elapsed="0.110538"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.520212" elapsed="0.111242"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.632164" level="INFO">${next} = 17973</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.631669" elapsed="0.000533"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.632986" level="INFO">${current_port} = 17973</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.632422" elapsed="0.000625"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.515795" elapsed="0.117331"/>
</kw>
<msg time="2026-08-15T23:55:30.633179" level="INFO">Repeating keyword, round 144/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.634754" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.634604" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.634576" elapsed="0.000301"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.635343" level="INFO">${current_Date} = 2026-08-15 23:55:30.635</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.635122" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.636049" level="INFO">${ellapsed_seconds} = 2659.702</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.635584" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.636518" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.636184" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.636158" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.634273" elapsed="0.002418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.637425" level="INFO">${number} = 144</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.636917" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.639441" level="INFO">${number} = 144</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.639057" elapsed="0.000411"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.641419" level="INFO">${device-port} = 17973</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.640617" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.644150" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.684267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.684492" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.644053" elapsed="0.040498"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.685470" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:30.685605" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.643187" elapsed="0.043196"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.687255" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17973 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.752846" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.753100" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.686739" elapsed="0.066416"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.753279" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:30.753714" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.642743" elapsed="0.111122"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.754503" elapsed="0.000948"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.641953" elapsed="0.113687"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.640176" elapsed="0.115701"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.639625" elapsed="0.116358"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.638384" elapsed="0.117726"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.637677" elapsed="0.118530"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.757365" level="INFO">${next} = 17974</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.756553" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.758726" level="INFO">${current_port} = 17974</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.757786" elapsed="0.001101"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.633445" elapsed="0.125576"/>
</kw>
<msg time="2026-08-15T23:55:30.759110" level="INFO">Repeating keyword, round 145/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.761639" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.761395" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.761352" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.762557" level="INFO">${current_Date} = 2026-08-15 23:55:30.762</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.762194" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.763420" level="INFO">${ellapsed_seconds} = 2659.575</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.762985" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.763766" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.763517" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.763497" elapsed="0.000367"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.760862" elapsed="0.003047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.764416" level="INFO">${number} = 145</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.764056" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.765870" level="INFO">${number} = 145</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.765512" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.767879" level="INFO">${device-port} = 17974</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.767082" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.770860" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.800791" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.801065" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.770528" elapsed="0.030597"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.802090" elapsed="0.000093"/>
</kw>
<msg time="2026-08-15T23:55:30.802264" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.769817" elapsed="0.033270"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.803990" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17974 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.872708" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.872974" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.803460" elapsed="0.069573"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.873149" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:30.873587" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.769208" elapsed="0.104494"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.874365" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.768400" elapsed="0.107108"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.766605" elapsed="0.109110"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.766057" elapsed="0.109813"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.765064" elapsed="0.110943"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.764597" elapsed="0.111508"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.877282" level="INFO">${next} = 17975</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.876452" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.878720" level="INFO">${current_port} = 17975</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.877725" elapsed="0.001163"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.759550" elapsed="0.119476"/>
</kw>
<msg time="2026-08-15T23:55:30.879113" level="INFO">Repeating keyword, round 146/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.881722" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.881455" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.881413" elapsed="0.000495"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.882740" level="INFO">${current_Date} = 2026-08-15 23:55:30.883</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.882364" elapsed="0.000478"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.883512" level="INFO">${ellapsed_seconds} = 2659.454</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.883187" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.883885" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.883610" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.883592" elapsed="0.000375"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.880911" elapsed="0.003102"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.884532" level="INFO">${number} = 146</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.884161" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.886041" level="INFO">${number} = 146</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.885656" elapsed="0.000432"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.888107" level="INFO">${device-port} = 17975</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.887282" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.890741" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:30.920576" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.920881" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.890641" elapsed="0.030304"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.921954" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:30.922121" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:30.889924" elapsed="0.032998"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:30.923852" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17975 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:30.988557" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:30.988773" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:30.923295" elapsed="0.065575"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:30.988988" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:30.989401" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:30.889474" elapsed="0.100037"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:30.990151" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:30.888633" elapsed="0.102615"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:30.886791" elapsed="0.104649"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:30.886253" elapsed="0.105292"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.885203" elapsed="0.106469"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:30.884715" elapsed="0.107056"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.992967" level="INFO">${next} = 17976</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.992165" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:30.994336" level="INFO">${current_port} = 17976</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:30.993417" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.879539" elapsed="0.115023"/>
</kw>
<msg time="2026-08-15T23:55:30.994649" level="INFO">Repeating keyword, round 147/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:30.997274" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:30.997029" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.996978" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.998184" level="INFO">${current_Date} = 2026-08-15 23:55:30.998</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:30.997743" elapsed="0.000504"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:30.999314" level="INFO">${ellapsed_seconds} = 2659.339</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:30.998682" elapsed="0.000658"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:30.999660" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:30.999413" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:30.999393" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:30.996458" elapsed="0.003328"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.000322" level="INFO">${number} = 147</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:30.999951" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.001775" level="INFO">${number} = 147</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.001424" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.003894" level="INFO">${device-port} = 17976</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.003008" elapsed="0.000971"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.006502" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.040867" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.041114" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.006403" elapsed="0.034771"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.042158" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:31.042297" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.005669" elapsed="0.037398"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.043948" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17976 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.098308" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.098521" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.043426" elapsed="0.055151"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.098689" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:31.099141" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.005247" elapsed="0.094006"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.099857" elapsed="0.000859"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.004425" elapsed="0.096523"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.002531" elapsed="0.098613"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.001978" elapsed="0.099270"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.000974" elapsed="0.100401"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.000505" elapsed="0.100967"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.102692" level="INFO">${next} = 17977</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.101863" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.104327" level="INFO">${current_port} = 17977</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.103176" elapsed="0.001248"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:30.995180" elapsed="0.109375"/>
</kw>
<msg time="2026-08-15T23:55:31.104642" level="INFO">Repeating keyword, round 148/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.107233" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.107037" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.106986" elapsed="0.000312"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.107652" level="INFO">${current_Date} = 2026-08-15 23:55:31.108</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.107488" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.108170" level="INFO">${ellapsed_seconds} = 2659.229</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.107846" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.108515" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.108267" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.108249" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.106457" elapsed="0.002182"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.109192" level="INFO">${number} = 148</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.108824" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.110649" level="INFO">${number} = 148</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.110308" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.112732" level="INFO">${device-port} = 17977</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.111852" elapsed="0.000979"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.115329" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.152608" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.152874" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.115224" elapsed="0.037713"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.153844" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:31.154028" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.114525" elapsed="0.040188"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.155617" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17977 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.221467" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.221679" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.155122" elapsed="0.066612"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.221884" elapsed="0.000117"/>
</return>
<msg time="2026-08-15T23:55:31.222336" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.114108" elapsed="0.108336"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.223043" elapsed="0.000874"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.113277" elapsed="0.110830"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.111381" elapsed="0.112914"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.110853" elapsed="0.113543"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.109840" elapsed="0.114680"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.109376" elapsed="0.115262"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.225876" level="INFO">${next} = 17978</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.225043" elapsed="0.000927"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.227278" level="INFO">${current_port} = 17978</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.226350" elapsed="0.001025"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.105118" elapsed="0.122387"/>
</kw>
<msg time="2026-08-15T23:55:31.227590" level="INFO">Repeating keyword, round 149/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.230228" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.229971" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.229878" elapsed="0.000492"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.231083" level="INFO">${current_Date} = 2026-08-15 23:55:31.231</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.230703" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.231986" level="INFO">${ellapsed_seconds} = 2659.106</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.231478" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.232320" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.232084" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.232065" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.229317" elapsed="0.003127"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.232969" level="INFO">${number} = 149</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.232589" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.234431" level="INFO">${number} = 149</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.234085" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.236490" level="INFO">${device-port} = 17978</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.235648" elapsed="0.000928"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.239389" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.268586" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.268867" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.239131" elapsed="0.029801"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.269863" elapsed="0.000098"/>
</kw>
<msg time="2026-08-15T23:55:31.270044" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.238411" elapsed="0.032357"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.271648" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17978 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.336997" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.337214" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.271158" elapsed="0.066112"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.337381" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:31.337788" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.237954" elapsed="0.100027"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.338539" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.237052" elapsed="0.102596"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.235189" elapsed="0.104691"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.234622" elapsed="0.105364"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.233600" elapsed="0.106510"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.233156" elapsed="0.107049"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.341336" level="INFO">${next} = 17979</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.340548" elapsed="0.000848"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.342690" level="INFO">${current_port} = 17979</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.341754" elapsed="0.001031"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.228064" elapsed="0.114930"/>
</kw>
<msg time="2026-08-15T23:55:31.343089" level="INFO">Repeating keyword, round 150/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.344637" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.344484" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.344457" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.345224" level="INFO">${current_Date} = 2026-08-15 23:55:31.345</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.345005" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.345928" level="INFO">${ellapsed_seconds} = 2658.992</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.345469" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.346391" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.346065" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.346039" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.344152" elapsed="0.002413"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.347304" level="INFO">${number} = 150</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.346768" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.349317" level="INFO">${number} = 150</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.348846" elapsed="0.000508"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.352119" level="INFO">${device-port} = 17979</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.351014" elapsed="0.001216"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.355789" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.388600" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.388865" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.355527" elapsed="0.033402"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.389866" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:31.390009" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.354637" elapsed="0.036050"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.391552" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17979 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.456460" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.456717" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.391069" elapsed="0.065710"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.456939" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:31.457346" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.354023" elapsed="0.103433"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.458089" elapsed="0.000877"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.352861" elapsed="0.106346"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.350357" elapsed="0.109098"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.349583" elapsed="0.110017"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.348210" elapsed="0.111524"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.347563" elapsed="0.112360"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.461197" level="INFO">${next} = 17980</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.460350" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.462563" level="INFO">${current_port} = 17980</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.461632" elapsed="0.001025"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.343362" elapsed="0.119424"/>
</kw>
<msg time="2026-08-15T23:55:31.462938" level="INFO">Repeating keyword, round 151/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.465470" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.465224" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.465181" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.466436" level="INFO">${current_Date} = 2026-08-15 23:55:31.466</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.466073" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.467360" level="INFO">${ellapsed_seconds} = 2658.871</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.466860" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.467690" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.467456" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.467437" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.464654" elapsed="0.003174"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.468335" level="INFO">${number} = 151</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.467974" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.469755" level="INFO">${number} = 151</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.469421" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.471735" level="INFO">${device-port} = 17980</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.470970" elapsed="0.000860"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.474571" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.504185" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.504431" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.474465" elapsed="0.030026"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.505443" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:31.505579" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.473521" elapsed="0.032921"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.507330" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17980 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.572898" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.573157" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.506830" elapsed="0.066388"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.573351" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:31.573906" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.473061" elapsed="0.100974"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.574673" elapsed="0.001014"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.472263" elapsed="0.103681"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.470503" elapsed="0.105650"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.469976" elapsed="0.106287"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.468973" elapsed="0.107425"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.468514" elapsed="0.107990"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.578054" level="INFO">${next} = 17981</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.577024" elapsed="0.001096"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.579641" level="INFO">${current_port} = 17981</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.578539" elapsed="0.001210"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.463374" elapsed="0.116579"/>
</kw>
<msg time="2026-08-15T23:55:31.580064" level="INFO">Repeating keyword, round 152/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.582482" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.582363" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.582341" elapsed="0.000208"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.582970" level="INFO">${current_Date} = 2026-08-15 23:55:31.583</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.582770" elapsed="0.000229"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.583497" level="INFO">${ellapsed_seconds} = 2658.754</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.583153" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.583870" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.583597" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.583579" elapsed="0.000373"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.582011" elapsed="0.001988"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.584525" level="INFO">${number} = 152</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.584151" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.586061" level="INFO">${number} = 152</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.585664" elapsed="0.000425"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.588164" level="INFO">${device-port} = 17981</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.587315" elapsed="0.000939"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.591093" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.624429" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.624668" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.590990" elapsed="0.033745"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.625759" elapsed="0.000096"/>
</kw>
<msg time="2026-08-15T23:55:31.625942" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.590060" elapsed="0.036591"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.627535" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17981 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.692527" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.692793" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.627046" elapsed="0.065860"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.693038" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:31.693491" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.589592" elapsed="0.104011"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.694316" elapsed="0.000996"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.588719" elapsed="0.106795"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.586827" elapsed="0.108885"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.586255" elapsed="0.109611"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.585206" elapsed="0.110825"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.584709" elapsed="0.111441"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.697393" level="INFO">${next} = 17982</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.696505" elapsed="0.000950"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.698896" level="INFO">${current_port} = 17982</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.697953" elapsed="0.001043"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.580550" elapsed="0.118583"/>
</kw>
<msg time="2026-08-15T23:55:31.699224" level="INFO">Repeating keyword, round 153/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.701968" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.701611" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.701567" elapsed="0.000571"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.702489" level="INFO">${current_Date} = 2026-08-15 23:55:31.702</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.702318" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.703013" level="INFO">${ellapsed_seconds} = 2658.635</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.702664" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.703369" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.703116" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.703097" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.701065" elapsed="0.002428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.704028" level="INFO">${number} = 153</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.703641" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.705497" level="INFO">${number} = 153</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.705149" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.707517" level="INFO">${device-port} = 17982</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.706706" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.710335" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.740204" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.740426" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.710236" elapsed="0.030248"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.741415" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:31.741548" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.709303" elapsed="0.033091"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.743246" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17982 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.808870" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.809092" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.742738" elapsed="0.066409"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.809264" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:31.809717" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.708889" elapsed="0.101004"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.810485" elapsed="0.000933"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.708069" elapsed="0.103544"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.706260" elapsed="0.105602"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.705704" elapsed="0.106275"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.704675" elapsed="0.107444"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.704209" elapsed="0.108011"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.813391" level="INFO">${next} = 17983</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.812569" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.814524" level="INFO">${current_port} = 17983</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.813945" elapsed="0.000638"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.699690" elapsed="0.114976"/>
</kw>
<msg time="2026-08-15T23:55:31.814720" level="INFO">Repeating keyword, round 154/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.816468" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.816313" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.816286" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.817122" level="INFO">${current_Date} = 2026-08-15 23:55:31.817</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.816878" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.817905" level="INFO">${ellapsed_seconds} = 2658.52</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.817370" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.818393" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.818055" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.818028" elapsed="0.000477"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.815965" elapsed="0.002604"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.819346" level="INFO">${number} = 154</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.818776" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.821417" level="INFO">${number} = 154</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.820922" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.824348" level="INFO">${device-port} = 17983</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.823210" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.827722" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.856695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.856966" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.827623" elapsed="0.029406"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.858027" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:31.858168" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.826716" elapsed="0.032198"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.859780" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17983 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:31.929177" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.929393" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.859269" elapsed="0.070179"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:31.929590" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:55:31.930083" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.826304" elapsed="0.103893"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:31.930762" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.825119" elapsed="0.106812"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.822524" elapsed="0.109635"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.821696" elapsed="0.110570"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.820275" elapsed="0.112115"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.819603" elapsed="0.112884"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.933700" level="INFO">${next} = 17984</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.932894" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.935138" level="INFO">${current_port} = 17984</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:31.934214" elapsed="0.001026"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.815051" elapsed="0.120320"/>
</kw>
<msg time="2026-08-15T23:55:31.935460" level="INFO">Repeating keyword, round 155/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:31.938270" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:31.938109" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.938055" elapsed="0.000280"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.938634" level="INFO">${current_Date} = 2026-08-15 23:55:31.939</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:31.938481" elapsed="0.000180"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:31.939130" level="INFO">${ellapsed_seconds} = 2658.398</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:31.938824" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.939463" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:31.939228" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:31.939209" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:31.937347" elapsed="0.002241"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.940126" level="INFO">${number} = 155</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.939733" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.941586" level="INFO">${number} = 155</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.941219" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:31.943536" level="INFO">${device-port} = 17984</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:31.942742" elapsed="0.000873"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.948586" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:31.980593" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:31.980875" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.948487" elapsed="0.032457"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:31.982085" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:31.982244" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:31.945284" elapsed="0.037888"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:31.984233" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17984 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.052355" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.052586" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:31.983593" elapsed="0.069049"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.052759" elapsed="0.000121"/>
</return>
<msg time="2026-08-15T23:55:32.053229" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:31.944872" elapsed="0.108467"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.053980" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:31.944067" elapsed="0.111024"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:31.942302" elapsed="0.112978"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:31.941772" elapsed="0.113609"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.940753" elapsed="0.114752"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:31.940308" elapsed="0.115290"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.057012" level="INFO">${next} = 17985</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.055984" elapsed="0.001091"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.058361" level="INFO">${current_port} = 17985</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.057441" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:31.935949" elapsed="0.122635"/>
</kw>
<msg time="2026-08-15T23:55:32.058669" level="INFO">Repeating keyword, round 156/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.061205" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.060965" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.060924" elapsed="0.000422"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.062094" level="INFO">${current_Date} = 2026-08-15 23:55:32.062</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.061829" elapsed="0.000291"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.062588" level="INFO">${ellapsed_seconds} = 2658.275</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.062269" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.062948" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.062684" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.062665" elapsed="0.000363"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.060420" elapsed="0.002654"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.063582" level="INFO">${number} = 156</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.063219" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.065025" level="INFO">${number} = 156</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.064669" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.067033" level="INFO">${device-port} = 17985</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.066232" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.069745" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.104648" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.104903" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.069646" elapsed="0.035318"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.105908" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:32.106046" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.068768" elapsed="0.037959"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.107580" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17985 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.199165" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.199379" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.107104" elapsed="0.092329"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.199546" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:32.199987" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.068359" elapsed="0.131740"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.200654" elapsed="0.000915"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.067553" elapsed="0.134206"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.065757" elapsed="0.136233"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.065211" elapsed="0.136880"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.064228" elapsed="0.137985"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.063764" elapsed="0.138545"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.203443" level="INFO">${next} = 17986</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.202653" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.204762" level="INFO">${current_port} = 17986</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.203917" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.059159" elapsed="0.145873"/>
</kw>
<msg time="2026-08-15T23:55:32.205120" level="INFO">Repeating keyword, round 157/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.207642" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.207398" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.207356" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.208483" level="INFO">${current_Date} = 2026-08-15 23:55:32.208</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.208144" elapsed="0.000398"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.209638" level="INFO">${ellapsed_seconds} = 2658.129</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.208901" elapsed="0.000796"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.210305" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.209886" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.209842" elapsed="0.000542"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.206870" elapsed="0.003559"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.210954" level="INFO">${number} = 157</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.210575" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.212378" level="INFO">${number} = 157</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.212042" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.214390" level="INFO">${device-port} = 17986</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.213578" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.217098" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.248432" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.248661" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.216826" elapsed="0.031894"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.249669" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:32.249833" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.216142" elapsed="0.034391"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.251390" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17986 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.316549" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.316762" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.250909" elapsed="0.065946"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.316971" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:32.317408" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.215717" elapsed="0.101820"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.318144" elapsed="0.000865"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.214941" elapsed="0.104256"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.213105" elapsed="0.106280"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.212563" elapsed="0.106923"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.211583" elapsed="0.108027"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.211142" elapsed="0.108562"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.320935" level="INFO">${next} = 17987</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.320109" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.322313" level="INFO">${current_port} = 17987</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.321401" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.205573" elapsed="0.117035"/>
</kw>
<msg time="2026-08-15T23:55:32.322702" level="INFO">Repeating keyword, round 158/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.325235" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.324988" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.324945" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.326219" level="INFO">${current_Date} = 2026-08-15 23:55:32.326</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.325879" elapsed="0.000367"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.326698" level="INFO">${ellapsed_seconds} = 2658.011</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.326396" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.327048" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.326795" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.326777" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.324429" elapsed="0.002748"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.327686" level="INFO">${number} = 158</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.327322" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.329183" level="INFO">${number} = 158</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.328840" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.331274" level="INFO">${device-port} = 17987</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.330379" elapsed="0.000978"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.333857" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.364864" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.364971" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.333734" elapsed="0.031267"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.365910" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:32.366048" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.333047" elapsed="0.033677"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.367591" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17987 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.436911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.437128" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.367108" elapsed="0.070076"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.437300" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:55:32.437754" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.332612" elapsed="0.105297"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.438473" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.331819" elapsed="0.107722"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.329923" elapsed="0.109808"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.329380" elapsed="0.110497"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.328331" elapsed="0.111675"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.327886" elapsed="0.112216"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.441235" level="INFO">${next} = 17988</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.440447" elapsed="0.000848"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.442613" level="INFO">${current_port} = 17988</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.441681" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.323182" elapsed="0.119722"/>
</kw>
<msg time="2026-08-15T23:55:32.443075" level="INFO">Repeating keyword, round 159/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.445638" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.445385" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.445291" elapsed="0.000492"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.446348" level="INFO">${current_Date} = 2026-08-15 23:55:32.446</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.446172" elapsed="0.000204"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.446847" level="INFO">${ellapsed_seconds} = 2657.891</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.446524" elapsed="0.000351"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.447182" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.446947" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.446928" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.444771" elapsed="0.002536"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.447829" level="INFO">${number} = 159</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.447452" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.449260" level="INFO">${number} = 159</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.448922" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.451275" level="INFO">${device-port} = 17988</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.450475" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.453862" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.488471" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.488694" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.453739" elapsed="0.035015"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.489783" elapsed="0.000093"/>
</kw>
<msg time="2026-08-15T23:55:32.489960" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.453039" elapsed="0.037623"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.491525" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17988 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.561076" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.561325" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.491042" elapsed="0.070348"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.561501" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:32.561948" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.452604" elapsed="0.109461"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.562620" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.451795" elapsed="0.111890"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.450022" elapsed="0.113900"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.449475" elapsed="0.114550"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.448458" elapsed="0.115691"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.448012" elapsed="0.116231"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.565396" level="INFO">${next} = 17989</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.564586" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.566706" level="INFO">${current_port} = 17989</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.565860" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.443503" elapsed="0.123493"/>
</kw>
<msg time="2026-08-15T23:55:32.567081" level="INFO">Repeating keyword, round 160/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.569619" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.569371" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.569326" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.570369" level="INFO">${current_Date} = 2026-08-15 23:55:32.570</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.570208" elapsed="0.000188"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.570864" level="INFO">${ellapsed_seconds} = 2657.767</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.570545" elapsed="0.000347"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.571197" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.570963" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.570945" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.568757" elapsed="0.002564"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.571846" level="INFO">${number} = 160</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.571466" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.573303" level="INFO">${number} = 160</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.572942" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.575258" level="INFO">${device-port} = 17989</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.574474" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.577821" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.612627" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.612889" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.577700" elapsed="0.035252"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.613886" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:32.614024" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.577006" elapsed="0.037703"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.615583" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17989 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.685043" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.685294" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.615099" elapsed="0.070254"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.685466" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:32.685926" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.576573" elapsed="0.109468"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.686596" elapsed="0.000889"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.575771" elapsed="0.111904"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.574028" elapsed="0.113873"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.573486" elapsed="0.114520"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.572474" elapsed="0.115657"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.572029" elapsed="0.116198"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.689423" level="INFO">${next} = 17990</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.688573" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.690741" level="INFO">${current_port} = 17990</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.689888" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.567497" elapsed="0.123514"/>
</kw>
<msg time="2026-08-15T23:55:32.691099" level="INFO">Repeating keyword, round 161/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.693670" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.693428" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.693384" elapsed="0.000459"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.694366" level="INFO">${current_Date} = 2026-08-15 23:55:32.694</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.694207" elapsed="0.000187"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.694891" level="INFO">${ellapsed_seconds} = 2657.643</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.694542" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.695228" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.694992" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.694972" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.692831" elapsed="0.002519"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.695875" level="INFO">${number} = 161</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.695493" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.697323" level="INFO">${number} = 161</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.696961" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.699338" level="INFO">${device-port} = 17990</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.698517" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.702065" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.736838" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.737079" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.701791" elapsed="0.035349"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.738113" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:32.738252" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.701111" elapsed="0.037896"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.739905" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17990 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.805194" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.805428" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.739366" elapsed="0.066119"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.805604" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:32.806068" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.700681" elapsed="0.105502"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.806775" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.699891" elapsed="0.108049"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.698064" elapsed="0.110074"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.697515" elapsed="0.110724"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.696501" elapsed="0.111868"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.696058" elapsed="0.112405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.809656" level="INFO">${next} = 17991</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.808851" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.811028" level="INFO">${current_port} = 17991</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.810135" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.691514" elapsed="0.119741"/>
</kw>
<msg time="2026-08-15T23:55:32.811341" level="INFO">Repeating keyword, round 162/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.813991" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.813701" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.813656" elapsed="0.000485"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.814625" level="INFO">${current_Date} = 2026-08-15 23:55:32.815</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.814400" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.815327" level="INFO">${ellapsed_seconds} = 2657.522</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.814895" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.815792" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.815463" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.815437" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.813088" elapsed="0.002900"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.816702" level="INFO">${number} = 162</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.816194" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.818773" level="INFO">${number} = 162</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.818300" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.821569" level="INFO">${device-port} = 17991</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.820434" elapsed="0.001244"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.825459" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.856932" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.857223" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.825072" elapsed="0.032236"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.858289" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:32.858424" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.824046" elapsed="0.035098"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.860017" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17991 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:32.929050" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.929314" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.859496" elapsed="0.069879"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:32.929502" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:32.930005" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.823439" elapsed="0.106687"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:32.930743" elapsed="0.000992"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.822317" elapsed="0.109659"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.819782" elapsed="0.112396"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.819062" elapsed="0.113224"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.817655" elapsed="0.114763"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.816977" elapsed="0.115543"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.933846" level="INFO">${next} = 17992</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.932932" elapsed="0.000983"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.934731" level="INFO">${current_port} = 17992</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:32.934195" elapsed="0.000595"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.811765" elapsed="0.123148"/>
</kw>
<msg time="2026-08-15T23:55:32.934969" level="INFO">Repeating keyword, round 163/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:32.936568" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:32.936412" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.936384" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.937135" level="INFO">${current_Date} = 2026-08-15 23:55:32.937</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:32.936890" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:32.937925" level="INFO">${ellapsed_seconds} = 2657.4</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:32.937379" elapsed="0.000583"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.938403" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:32.938063" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:32.938036" elapsed="0.000477"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:32.936075" elapsed="0.002501"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.939328" level="INFO">${number} = 163</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.938779" elapsed="0.000587"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.941407" level="INFO">${number} = 163</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.940877" elapsed="0.000569"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:32.943661" level="INFO">${device-port} = 17992</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:32.942873" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.946397" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:32.980883" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:32.981147" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.946145" elapsed="0.035064"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:32.982248" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:32.982385" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:32.945450" elapsed="0.037732"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:32.984042" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17992 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.049311" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.049639" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:32.983529" elapsed="0.066151"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.049841" elapsed="0.000106"/>
</return>
<msg time="2026-08-15T23:55:33.050268" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:32.945020" elapsed="0.105325"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.050875" elapsed="0.000744"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:32.944217" elapsed="0.107534"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:32.942398" elapsed="0.109517"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:32.941669" elapsed="0.110328"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.940229" elapsed="0.111861"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:32.939584" elapsed="0.112572"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.052955" level="INFO">${next} = 17993</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.052385" elapsed="0.000607"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.053883" level="INFO">${current_port} = 17993</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.053282" elapsed="0.000662"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:32.935247" elapsed="0.118781"/>
</kw>
<msg time="2026-08-15T23:55:33.054087" level="INFO">Repeating keyword, round 164/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.055880" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.055688" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.055657" elapsed="0.000311"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.056407" level="INFO">${current_Date} = 2026-08-15 23:55:33.056</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.056220" elapsed="0.000214"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.057045" level="INFO">${ellapsed_seconds} = 2657.281</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.056588" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.057518" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.057184" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.057158" elapsed="0.000455"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.055341" elapsed="0.002321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.058222" level="INFO">${number} = 164</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.057842" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.059986" level="INFO">${number} = 164</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.059531" elapsed="0.000494"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.062788" level="INFO">${device-port} = 17993</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.061692" elapsed="0.001241"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.066713" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.101111" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.101263" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.066567" elapsed="0.034724"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.101788" elapsed="0.000053"/>
</kw>
<msg time="2026-08-15T23:55:33.101881" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.065257" elapsed="0.037007"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.102667" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17993 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.168751" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.169662" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.102437" elapsed="0.067258"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.169816" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:33.170117" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.064661" elapsed="0.105506"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.170513" elapsed="0.000545"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.063544" elapsed="0.107601"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.061067" elapsed="0.110170"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.060257" elapsed="0.111032"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.059003" elapsed="0.112348"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.058409" elapsed="0.112989"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.171961" level="INFO">${next} = 17994</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.171562" elapsed="0.000426"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.172566" level="INFO">${current_port} = 17994</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.172157" elapsed="0.000451"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.054434" elapsed="0.118235"/>
</kw>
<msg time="2026-08-15T23:55:33.172711" level="INFO">Repeating keyword, round 165/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.174041" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.173921" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.173899" elapsed="0.000208"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.174443" level="INFO">${current_Date} = 2026-08-15 23:55:33.174</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.174260" elapsed="0.000210"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.174994" level="INFO">${ellapsed_seconds} = 2657.163</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.174620" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.175358" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.175095" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.175074" elapsed="0.000363"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.173641" elapsed="0.001841"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.176019" level="INFO">${number} = 165</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.175629" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.177545" level="INFO">${number} = 165</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.177160" elapsed="0.000414"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.179553" level="INFO">${device-port} = 17994</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.178741" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.182358" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.221188" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.221527" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.182252" elapsed="0.039336"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.222725" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:33.222896" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.181328" elapsed="0.042620"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.224886" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17994 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.293358" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.293688" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.224336" elapsed="0.069410"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.293938" elapsed="0.000109"/>
</return>
<msg time="2026-08-15T23:55:33.294446" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.180898" elapsed="0.113661"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.295248" elapsed="0.000998"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.180092" elapsed="0.116345"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.178297" elapsed="0.118334"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.177736" elapsed="0.118999"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.176656" elapsed="0.120275"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.176203" elapsed="0.120830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.298212" level="INFO">${next} = 17995</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.297382" elapsed="0.000890"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.299546" level="INFO">${current_port} = 17995</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.298634" elapsed="0.001005"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.173003" elapsed="0.126767"/>
</kw>
<msg time="2026-08-15T23:55:33.299917" level="INFO">Repeating keyword, round 166/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.302559" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.302306" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.302260" elapsed="0.000443"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.303522" level="INFO">${current_Date} = 2026-08-15 23:55:33.303</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.303156" elapsed="0.000424"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.304652" level="INFO">${ellapsed_seconds} = 2657.034</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.303944" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.305501" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.304946" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.304854" elapsed="0.000823"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.301740" elapsed="0.004037"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.306480" level="INFO">${number} = 166</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.306108" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.307943" level="INFO">${number} = 166</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.307579" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.309982" level="INFO">${device-port} = 17995</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.309172" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.312889" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.345214" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.345468" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.312739" elapsed="0.032788"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.346505" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:33.346643" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.311764" elapsed="0.035663"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.348320" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17995 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.417211" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.417457" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.347826" elapsed="0.069688"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.417636" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:33.418128" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.311345" elapsed="0.106893"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.418899" elapsed="0.001002"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.310515" elapsed="0.109598"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.308680" elapsed="0.111627"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.308136" elapsed="0.112277"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.307132" elapsed="0.113421"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.306661" elapsed="0.114000"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.421936" level="INFO">${next} = 17996</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.421100" elapsed="0.000902"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.423297" level="INFO">${current_port} = 17996</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.422373" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.300400" elapsed="0.123124"/>
</kw>
<msg time="2026-08-15T23:55:33.423612" level="INFO">Repeating keyword, round 167/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.425896" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.425718" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.425690" elapsed="0.000295"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.426425" level="INFO">${current_Date} = 2026-08-15 23:55:33.426</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.426192" elapsed="0.000270"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.427139" level="INFO">${ellapsed_seconds} = 2656.911</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.426669" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.427640" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.427273" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.427247" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.425374" elapsed="0.002473"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.428563" level="INFO">${number} = 167</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.428057" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.430617" level="INFO">${number} = 167</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.430143" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.433431" level="INFO">${device-port} = 17996</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.432391" elapsed="0.001122"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.438793" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.468785" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.469076" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.438689" elapsed="0.030450"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.470163" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:33.470305" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.435214" elapsed="0.035891"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.471962" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17996 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.541200" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.541507" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.471448" elapsed="0.070116"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.541707" elapsed="0.000146"/>
</return>
<msg time="2026-08-15T23:55:33.542257" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.434777" elapsed="0.107591"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.543030" elapsed="0.000977"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.433987" elapsed="0.110215"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.431637" elapsed="0.112756"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.430894" elapsed="0.113601"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.429502" elapsed="0.115120"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.428852" elapsed="0.115867"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.545981" level="INFO">${next} = 17997</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.545148" elapsed="0.000893"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.547317" level="INFO">${current_port} = 17997</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.546407" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.424116" elapsed="0.123426"/>
</kw>
<msg time="2026-08-15T23:55:33.547628" level="INFO">Repeating keyword, round 168/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.550312" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.550065" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.550021" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.551299" level="INFO">${current_Date} = 2026-08-15 23:55:33.551</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.550927" elapsed="0.000431"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.552422" level="INFO">${ellapsed_seconds} = 2656.786</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.551688" elapsed="0.000792"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.553255" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.552638" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.552597" elapsed="0.000739"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.549496" elapsed="0.003886"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.553910" level="INFO">${number} = 168</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.553528" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.555346" level="INFO">${number} = 168</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.555002" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.557384" level="INFO">${device-port} = 17997</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.556545" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.560160" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.592915" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.593141" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.560058" elapsed="0.033141"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.594140" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:55:33.594295" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.559167" elapsed="0.035846"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.595872" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17997 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.664880" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.665096" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.595364" elapsed="0.069786"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.665261" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:33.665660" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.558735" elapsed="0.107034"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.666374" elapsed="0.000872"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.557943" elapsed="0.109494"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.556091" elapsed="0.111535"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.555532" elapsed="0.112193"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.554541" elapsed="0.113356"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.554097" elapsed="0.113900"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.669145" level="INFO">${next} = 17998</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.668345" elapsed="0.000859"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.670455" level="INFO">${current_port} = 17998</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.669563" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.548158" elapsed="0.122518"/>
</kw>
<msg time="2026-08-15T23:55:33.670760" level="INFO">Repeating keyword, round 169/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.673280" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.673110" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.673060" elapsed="0.000308"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.673789" level="INFO">${current_Date} = 2026-08-15 23:55:33.674</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.673572" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.674485" level="INFO">${ellapsed_seconds} = 2656.663</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.674062" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.674965" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.674620" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.674594" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.672487" elapsed="0.002654"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.675864" level="INFO">${number} = 169</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.675343" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.677912" level="INFO">${number} = 169</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.677422" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.680726" level="INFO">${device-port} = 17998</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.679598" elapsed="0.001275"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.684621" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.712724" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.712984" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.684213" elapsed="0.028831"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.713940" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:33.714074" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.683189" elapsed="0.031573"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.715623" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17998 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.780926" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.781141" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.715143" elapsed="0.066052"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.781306" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:33.781704" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.682585" elapsed="0.099276"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.782424" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.681480" elapsed="0.102016"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.678978" elapsed="0.104706"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.678218" elapsed="0.105566"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.676771" elapsed="0.107187"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.676117" elapsed="0.107936"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.785231" level="INFO">${next} = 17999</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.784394" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.786057" level="INFO">${current_port} = 17999</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.785492" elapsed="0.000626"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.671245" elapsed="0.114957"/>
</kw>
<msg time="2026-08-15T23:55:33.786254" level="INFO">Repeating keyword, round 170/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.787834" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.787660" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.787634" elapsed="0.000293"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.788389" level="INFO">${current_Date} = 2026-08-15 23:55:33.788</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.788175" elapsed="0.000251"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.789095" level="INFO">${ellapsed_seconds} = 2656.549</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.788633" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.789606" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.789231" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.789206" elapsed="0.000518"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.787329" elapsed="0.002509"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.790566" level="INFO">${number} = 170</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.790055" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.792580" level="INFO">${number} = 170</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.792106" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.795424" level="INFO">${device-port} = 17999</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.794291" elapsed="0.001249"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.798585" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.828592" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.828896" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.798487" elapsed="0.030472"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.829870" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:33.830009" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.797780" elapsed="0.032917"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.831573" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17999 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:33.896881" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.897118" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.831084" elapsed="0.066091"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:33.897298" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:33.897735" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.797360" elapsed="0.100529"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:33.898477" elapsed="0.000936"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.796195" elapsed="0.103409"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.793627" elapsed="0.106213"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.792895" elapsed="0.107059"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.791464" elapsed="0.108620"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.790838" elapsed="0.109346"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.901369" level="INFO">${next} = 18000</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.900534" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.902715" level="INFO">${current_port} = 18000</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:33.901838" elapsed="0.001039"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.786515" elapsed="0.116503"/>
</kw>
<msg time="2026-08-15T23:55:33.903106" level="INFO">Repeating keyword, round 171/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:33.905766" elapsed="0.000061"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:33.905519" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.905475" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.906647" level="INFO">${current_Date} = 2026-08-15 23:55:33.906</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:33.906290" elapsed="0.000418"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:33.907776" level="INFO">${ellapsed_seconds} = 2656.431</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:33.907078" elapsed="0.000786"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.908642" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:33.908026" elapsed="0.000748"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:33.907984" elapsed="0.000878"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:33.904978" elapsed="0.003990"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.909539" level="INFO">${number} = 171</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.909169" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.911162" level="INFO">${number} = 171</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.910792" elapsed="0.000397"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:33.913207" level="INFO">${device-port} = 18000</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:33.912364" elapsed="0.000925"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.915917" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:33.944837" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:33.945079" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.915782" elapsed="0.029375"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:33.946152" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:33.946306" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:33.915079" elapsed="0.032014"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:33.947963" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18000 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.012922" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.013187" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:33.947448" elapsed="0.065800"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.013382" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:55:34.013882" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:33.914618" elapsed="0.099390"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.014639" elapsed="0.000955"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:33.913748" elapsed="0.102047"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:33.911910" elapsed="0.104134"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:33.911350" elapsed="0.104802"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.910199" elapsed="0.106093"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:33.909722" elapsed="0.106702"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.017867" level="INFO">${next} = 18001</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.016901" elapsed="0.001041"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.019389" level="INFO">${current_port} = 18001</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.018413" elapsed="0.001076"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:33.903562" elapsed="0.116063"/>
</kw>
<msg time="2026-08-15T23:55:34.019714" level="INFO">Repeating keyword, round 172/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.021979" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.021794" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.021763" elapsed="0.000310"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.022584" level="INFO">${current_Date} = 2026-08-15 23:55:34.022</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.022345" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.023333" level="INFO">${ellapsed_seconds} = 2656.315</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.022858" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.023847" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.023473" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.023446" elapsed="0.000516"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.021448" elapsed="0.002580"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.024785" level="INFO">${number} = 172</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.024236" elapsed="0.000617"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.026876" level="INFO">${number} = 172</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.026368" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.029712" level="INFO">${device-port} = 18001</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.028578" elapsed="0.001280"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.033536" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.060936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.061162" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.033435" elapsed="0.027787"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.062150" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:34.062286" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.032360" elapsed="0.030687"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.063921" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18001 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.128764" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.129030" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.063405" elapsed="0.065681"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.129203" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:34.129618" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.031749" elapsed="0.097979"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.130345" elapsed="0.001060"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.030475" elapsed="0.101119"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.027926" elapsed="0.103860"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.027144" elapsed="0.104792"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.025713" elapsed="0.106350"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.025076" elapsed="0.107085"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.133262" level="INFO">${next} = 18002</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.132569" elapsed="0.000730"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.134094" level="INFO">${current_port} = 18002</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.133528" elapsed="0.000626"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.020266" elapsed="0.113969"/>
</kw>
<msg time="2026-08-15T23:55:34.134290" level="INFO">Repeating keyword, round 173/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.135895" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.135717" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.135689" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.136406" level="INFO">${current_Date} = 2026-08-15 23:55:34.136</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.136189" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.137149" level="INFO">${ellapsed_seconds} = 2656.201</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.136688" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.137638" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.137304" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.137278" elapsed="0.000469"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.135381" elapsed="0.002448"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.138542" level="INFO">${number} = 173</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.138035" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.140734" level="INFO">${number} = 173</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.140192" elapsed="0.000582"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.143622" level="INFO">${device-port} = 18002</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.142477" elapsed="0.001260"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.146914" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.180839" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.181084" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.146741" elapsed="0.034405"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.182129" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:34.182270" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.146066" elapsed="0.037031"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.183999" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18002 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.248624" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.248894" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.183473" elapsed="0.065482"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.249072" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:34.249483" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.145621" elapsed="0.103973"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.250202" elapsed="0.000892"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.144396" elapsed="0.106890"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.141790" elapsed="0.109689"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.141027" elapsed="0.110554"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.139549" elapsed="0.112155"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.138794" elapsed="0.113047"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.253057" level="INFO">${next} = 18003</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.252193" elapsed="0.000935"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.253936" level="INFO">${current_port} = 18003</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.253369" elapsed="0.000629"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.134559" elapsed="0.119520"/>
</kw>
<msg time="2026-08-15T23:55:34.254133" level="INFO">Repeating keyword, round 174/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.255702" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.255546" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.255520" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.256299" level="INFO">${current_Date} = 2026-08-15 23:55:34.256</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.256076" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.257041" level="INFO">${ellapsed_seconds} = 2656.081</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.256579" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.257515" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.257182" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.257157" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.255213" elapsed="0.002475"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.258424" level="INFO">${number} = 174</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.257914" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.260822" level="INFO">${number} = 174</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.260312" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.263298" level="INFO">${device-port} = 18003</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.262491" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.266019" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.296603" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.296925" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.265746" elapsed="0.031256"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.298027" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:34.298181" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.265086" elapsed="0.033920"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.299918" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18003 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.364895" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.365116" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.299389" elapsed="0.065797"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.365306" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:34.365727" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.264655" elapsed="0.101230"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.366494" elapsed="0.000949"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.263844" elapsed="0.103797"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.261953" elapsed="0.105927"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.261165" elapsed="0.106823"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.259658" elapsed="0.108455"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.258678" elapsed="0.109563"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.369460" level="INFO">${next} = 18004</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.368630" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.370920" level="INFO">${current_port} = 18004</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.369958" elapsed="0.001064"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.254399" elapsed="0.116766"/>
</kw>
<msg time="2026-08-15T23:55:34.371265" level="INFO">Repeating keyword, round 175/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.374120" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.373865" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.373785" elapsed="0.000510"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.375082" level="INFO">${current_Date} = 2026-08-15 23:55:34.375</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.374672" elapsed="0.000474"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.376259" level="INFO">${ellapsed_seconds} = 2655.962</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.375519" elapsed="0.000803"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.377131" elapsed="0.000072"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.376545" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.376500" elapsed="0.000782"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.373250" elapsed="0.004078"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.377859" level="INFO">${number} = 175</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.377475" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.379323" level="INFO">${number} = 175</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.378972" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.381357" level="INFO">${device-port} = 18004</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.380547" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.384041" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.416842" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.417084" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.383768" elapsed="0.033376"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.418192" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:34.418338" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.383108" elapsed="0.036015"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.420001" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18004 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.492701" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.492970" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.419477" elapsed="0.073550"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.493146" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:34.493574" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.382676" elapsed="0.111011"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.494328" elapsed="0.001011"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.381899" elapsed="0.113640"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.380057" elapsed="0.115679"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.379510" elapsed="0.116382"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.378509" elapsed="0.117520"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.378045" elapsed="0.118083"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.497470" level="INFO">${next} = 18005</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.496550" elapsed="0.000985"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.498964" level="INFO">${current_port} = 18005</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.497970" elapsed="0.001114"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.371746" elapsed="0.127497"/>
</kw>
<msg time="2026-08-15T23:55:34.499338" level="INFO">Repeating keyword, round 176/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.501861" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.501669" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.501641" elapsed="0.000317"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.502480" level="INFO">${current_Date} = 2026-08-15 23:55:34.502</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.502240" elapsed="0.000278"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.503217" level="INFO">${ellapsed_seconds} = 2655.835</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.502730" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.503704" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.503358" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.503332" elapsed="0.000508"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.501296" elapsed="0.002612"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.504673" level="INFO">${number} = 176</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.504116" elapsed="0.000594"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.506858" level="INFO">${number} = 176</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.506328" elapsed="0.000571"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.509768" level="INFO">${device-port} = 18005</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.508609" elapsed="0.001311"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.513717" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.548953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.549201" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.513618" elapsed="0.035649"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.550237" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:34.550380" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.512435" elapsed="0.038793"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.552207" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18005 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.617614" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.617925" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.551650" elapsed="0.066340"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.618126" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:55:34.618601" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.511751" elapsed="0.106966"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.619399" elapsed="0.001064"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.510568" elapsed="0.110101"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.507920" elapsed="0.113004"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.507126" elapsed="0.113915"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.505630" elapsed="0.115547"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.504956" elapsed="0.116327"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.622532" level="INFO">${next} = 18006</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.621662" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.624033" level="INFO">${current_port} = 18006</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.623035" elapsed="0.001102"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.499833" elapsed="0.124473"/>
</kw>
<msg time="2026-08-15T23:55:34.624406" level="INFO">Repeating keyword, round 177/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.627205" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.626939" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.626890" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.628126" level="INFO">${current_Date} = 2026-08-15 23:55:34.628</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.627710" elapsed="0.000480"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.629296" level="INFO">${ellapsed_seconds} = 2655.709</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.628693" elapsed="0.000630"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.629650" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.629394" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.629375" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.626332" elapsed="0.003442"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.630300" level="INFO">${number} = 177</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.629935" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.631730" level="INFO">${number} = 177</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.631389" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.633743" level="INFO">${device-port} = 18006</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.632972" elapsed="0.000868"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.636508" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.668659" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.668936" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.636407" elapsed="0.032615"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.670032" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:34.670182" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.635498" elapsed="0.035498"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.671920" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18006 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.737949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.738175" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.671368" elapsed="0.066865"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.738351" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:34.738775" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.635089" elapsed="0.103854"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.739543" elapsed="0.000986"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.634282" elapsed="0.106452"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.632498" elapsed="0.108477"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.631931" elapsed="0.109154"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.630944" elapsed="0.110276"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.630481" elapsed="0.110842"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.742527" level="INFO">${next} = 18007</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.741690" elapsed="0.000901"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.743969" level="INFO">${current_port} = 18007</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.743015" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.624933" elapsed="0.119301"/>
</kw>
<msg time="2026-08-15T23:55:34.744329" level="INFO">Repeating keyword, round 178/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.746678" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.746525" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.746499" elapsed="0.000267"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.747263" level="INFO">${current_Date} = 2026-08-15 23:55:34.747</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.747044" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.747955" level="INFO">${ellapsed_seconds} = 2655.59</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.747506" elapsed="0.000486"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.748440" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.748090" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.748064" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.746191" elapsed="0.002425"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.749357" level="INFO">${number} = 178</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.748842" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.751361" level="INFO">${number} = 178</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.750890" elapsed="0.000508"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.754242" level="INFO">${device-port} = 18007</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.753126" elapsed="0.001229"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.757906" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.788341" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.788562" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.757705" elapsed="0.030914"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.789528" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:34.789662" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.756750" elapsed="0.033641"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.791255" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18007 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.856853" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.857069" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.790741" elapsed="0.066385"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.857239" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:34.857641" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.756137" elapsed="0.101612"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.858353" elapsed="0.000866"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.755006" elapsed="0.104404"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.752462" elapsed="0.107137"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.751620" elapsed="0.108080"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.750252" elapsed="0.109618"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.749611" elapsed="0.110361"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.861136" level="INFO">${next} = 18008</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.860352" elapsed="0.000843"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.862442" level="INFO">${current_port} = 18008</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.861551" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.744780" elapsed="0.117885"/>
</kw>
<msg time="2026-08-15T23:55:34.862752" level="INFO">Repeating keyword, round 179/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.865342" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.865099" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.865057" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.866174" level="INFO">${current_Date} = 2026-08-15 23:55:34.866</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.865830" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.867366" level="INFO">${ellapsed_seconds} = 2655.471</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.866560" elapsed="0.000866"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.868135" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.867586" elapsed="0.000607"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.867542" elapsed="0.000675"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.864537" elapsed="0.003726"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.868768" level="INFO">${number} = 179</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.868408" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.870242" level="INFO">${number} = 179</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.869908" elapsed="0.000360"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.872252" level="INFO">${device-port} = 18008</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.871439" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.877473" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:34.904466" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.904690" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.877375" elapsed="0.027374"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.905695" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:34.905859" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.874025" elapsed="0.032536"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.907420" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18008 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:34.972507" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:34.972722" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.906938" elapsed="0.065838"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:34.972926" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:34.973338" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.873584" elapsed="0.099865"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:34.974040" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.872769" elapsed="0.102337"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.870959" elapsed="0.104334"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.870425" elapsed="0.104969"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.869449" elapsed="0.106068"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.868968" elapsed="0.106642"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.976870" level="INFO">${next} = 18009</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.975991" elapsed="0.000943"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.977747" level="INFO">${current_port} = 18009</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:34.977214" elapsed="0.000622"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.863235" elapsed="0.114685"/>
</kw>
<msg time="2026-08-15T23:55:34.977974" level="INFO">Repeating keyword, round 180/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:34.979526" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:34.979375" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.979349" elapsed="0.000265"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.980143" level="INFO">${current_Date} = 2026-08-15 23:55:34.980</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:34.979881" elapsed="0.000309"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:34.980850" level="INFO">${ellapsed_seconds} = 2655.357</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:34.980405" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:34.981323" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:34.980988" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:34.980962" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:34.979040" elapsed="0.002457"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.982235" level="INFO">${number} = 180</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.981698" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.984251" level="INFO">${number} = 180</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.983740" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:34.987004" level="INFO">${device-port} = 18009</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:34.985916" elapsed="0.001198"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:34.990397" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.020568" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.020791" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:34.990300" elapsed="0.030588"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.021766" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:55:35.021936" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:34.989432" elapsed="0.033185"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.023489" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18009 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.088377" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.088587" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.022999" elapsed="0.065642"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.088753" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:55:35.089207" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:34.988968" elapsed="0.100356"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.089928" elapsed="0.000838"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:34.987721" elapsed="0.103275"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:34.985264" elapsed="0.105926"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:34.984508" elapsed="0.106783"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.983126" elapsed="0.108289"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:34.982488" elapsed="0.109023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.092704" level="INFO">${next} = 18010</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.091902" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.094079" level="INFO">${current_port} = 18010</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.093184" elapsed="0.000993"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:34.978237" elapsed="0.116069"/>
</kw>
<msg time="2026-08-15T23:55:35.094393" level="INFO">Repeating keyword, round 181/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.096950" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.096670" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.096629" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.097795" level="INFO">${current_Date} = 2026-08-15 23:55:35.098</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.097452" elapsed="0.000437"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.098926" level="INFO">${ellapsed_seconds} = 2655.239</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.098226" elapsed="0.000760"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.099658" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.099143" elapsed="0.000636"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.099100" elapsed="0.000765"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.096141" elapsed="0.003831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.101147" level="INFO">${number} = 181</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.100349" elapsed="0.000824"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.102583" level="INFO">${number} = 181</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.102244" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.104569" level="INFO">${device-port} = 18010</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.103750" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.107297" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.140462" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.140689" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.107030" elapsed="0.033718"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.141665" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:35.141796" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.106344" elapsed="0.036184"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.143388" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18010 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.212953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.213167" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.142907" elapsed="0.070315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.213334" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:35.213736" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.105934" elapsed="0.107961"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.214459" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.105110" elapsed="0.110421"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.103304" elapsed="0.112416"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.102768" elapsed="0.113097"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.101778" elapsed="0.114302"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.101332" elapsed="0.114851"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.217320" level="INFO">${next} = 18011</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.216535" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.218633" level="INFO">${current_port} = 18011</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.217740" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.094863" elapsed="0.124060"/>
</kw>
<msg time="2026-08-15T23:55:35.219011" level="INFO">Repeating keyword, round 182/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.221557" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.221310" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.221263" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.222471" level="INFO">${current_Date} = 2026-08-15 23:55:35.222</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.222127" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.223569" level="INFO">${ellapsed_seconds} = 2655.115</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.222894" elapsed="0.000733"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.224386" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.223785" elapsed="0.000725"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.223744" elapsed="0.000821"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.220726" elapsed="0.003940"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.225536" level="INFO">${number} = 182</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.225025" elapsed="0.000537"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.226982" level="INFO">${number} = 182</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.226630" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.228949" level="INFO">${device-port} = 18011</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.228168" elapsed="0.000859"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.231430" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.264236" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.264342" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.231334" elapsed="0.033035"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.264766" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:55:35.264849" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.230659" elapsed="0.034593"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.266130" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18011 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.332901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.333120" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.265605" elapsed="0.067570"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.333286" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:35.333687" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.230255" elapsed="0.103541"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.334399" elapsed="0.000867"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.229460" elapsed="0.105993"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.227681" elapsed="0.107961"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.227168" elapsed="0.108574"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.226185" elapsed="0.109753"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.225717" elapsed="0.110323"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.337168" level="INFO">${next} = 18012</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.336385" elapsed="0.000842"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.338483" level="INFO">${current_port} = 18012</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.337588" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.219434" elapsed="0.119273"/>
</kw>
<msg time="2026-08-15T23:55:35.338792" level="INFO">Repeating keyword, round 183/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.341360" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.341120" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.341077" elapsed="0.000424"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.342196" level="INFO">${current_Date} = 2026-08-15 23:55:35.342</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.341853" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.343288" level="INFO">${ellapsed_seconds} = 2654.995</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.342586" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.344101" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.343506" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.343463" elapsed="0.000820"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.340557" elapsed="0.003831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.345321" level="INFO">${number} = 183</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.344714" elapsed="0.000633"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.346743" level="INFO">${number} = 183</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.346408" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.348761" level="INFO">${device-port} = 18012</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.347958" elapsed="0.000904"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.351324" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.384477" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.384700" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.351227" elapsed="0.033533"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.385673" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:35.385837" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.350534" elapsed="0.036012"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.387417" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18012 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.452507" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.452721" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.386929" elapsed="0.065847"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.452919" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:35.453324" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.350124" elapsed="0.103311"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.454035" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.349310" elapsed="0.105792"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.347460" elapsed="0.107833"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.346944" elapsed="0.108448"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.345964" elapsed="0.109552"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.345503" elapsed="0.110108"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.456767" level="INFO">${next} = 18013</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.456021" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.458121" level="INFO">${current_port} = 18013</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.457238" elapsed="0.001061"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.339286" elapsed="0.119152"/>
</kw>
<msg time="2026-08-15T23:55:35.458524" level="INFO">Repeating keyword, round 184/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.460662" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.460552" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.460532" elapsed="0.000195"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.461079" level="INFO">${current_Date} = 2026-08-15 23:55:35.461</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.460923" elapsed="0.000183"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.461564" level="INFO">${ellapsed_seconds} = 2654.876</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.461261" elapsed="0.000329"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.461912" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.461661" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.461643" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.460310" elapsed="0.001728"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.462546" level="INFO">${number} = 184</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.462184" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.463997" level="INFO">${number} = 184</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.463634" elapsed="0.000390"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.465965" level="INFO">${device-port} = 18013</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.465182" elapsed="0.000862"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.468493" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.500052" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.500214" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.468396" elapsed="0.031886"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.501205" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:35.501340" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.467696" elapsed="0.034351"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.502918" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18013 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.568426" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.568638" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.502402" elapsed="0.066290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.568842" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:35.569251" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.467289" elapsed="0.102070"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.569955" elapsed="0.000836"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.466493" elapsed="0.104526"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.464705" elapsed="0.106502"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.464183" elapsed="0.107124"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.463192" elapsed="0.108239"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.462728" elapsed="0.108798"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.572721" level="INFO">${next} = 18014</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.571967" elapsed="0.000813"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.574155" level="INFO">${current_port} = 18014</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.573194" elapsed="0.001067"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.459008" elapsed="0.115383"/>
</kw>
<msg time="2026-08-15T23:55:35.574477" level="INFO">Repeating keyword, round 185/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.577025" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.576748" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.576705" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.577865" level="INFO">${current_Date} = 2026-08-15 23:55:35.578</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.577491" elapsed="0.000438"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.578963" level="INFO">${ellapsed_seconds} = 2654.759</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.578261" elapsed="0.000761"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.579693" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.579178" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.579136" elapsed="0.000812"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.576219" elapsed="0.003834"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.580686" level="INFO">${number} = 185</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.580324" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.582122" level="INFO">${number} = 185</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.581770" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.584083" level="INFO">${device-port} = 18014</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.583287" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.586570" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.616609" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.616889" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.586473" elapsed="0.030480"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.617878" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:35.618017" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.585814" elapsed="0.032915"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.619606" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18014 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.684558" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.684852" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.619112" elapsed="0.065806"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.685036" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:35.685452" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.585393" elapsed="0.100172"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.686179" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.584599" elapsed="0.102672"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.582842" elapsed="0.104655"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.582307" elapsed="0.105295"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.581331" elapsed="0.106457"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.580883" elapsed="0.107057"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.689204" level="INFO">${next} = 18015</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.688328" elapsed="0.000946"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.690607" level="INFO">${current_port} = 18015</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.689646" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.574953" elapsed="0.115952"/>
</kw>
<msg time="2026-08-15T23:55:35.691017" level="INFO">Repeating keyword, round 186/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.693729" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.693481" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.693436" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.694680" level="INFO">${current_Date} = 2026-08-15 23:55:35.695</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.694324" elapsed="0.000417"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.695901" level="INFO">${ellapsed_seconds} = 2654.642</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.695117" elapsed="0.000847"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.696460" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.696145" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.696096" elapsed="0.000446"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.692890" elapsed="0.003696"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.697155" level="INFO">${number} = 186</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.696742" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.698622" level="INFO">${number} = 186</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.698266" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.700675" level="INFO">${device-port} = 18015</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.699885" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.703411" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.732401" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.732633" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.703158" elapsed="0.029536"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.733646" elapsed="0.000054"/>
</kw>
<msg time="2026-08-15T23:55:35.733778" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.702460" elapsed="0.032062"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.735411" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18015 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.800842" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.801080" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.734918" elapsed="0.066220"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.801260" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:55:35.801706" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.702046" elapsed="0.099820"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.802481" elapsed="0.000928"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.701232" elapsed="0.102381"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.699359" elapsed="0.104535"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.698830" elapsed="0.105180"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.697791" elapsed="0.106345"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.697342" elapsed="0.106901"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.805409" level="INFO">${next} = 18016</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.804606" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.806754" level="INFO">${current_port} = 18016</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.805873" elapsed="0.001053"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.691465" elapsed="0.115594"/>
</kw>
<msg time="2026-08-15T23:55:35.807147" level="INFO">Repeating keyword, round 187/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.809174" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.809019" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.808990" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.809686" level="INFO">${current_Date} = 2026-08-15 23:55:35.810</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.809470" elapsed="0.000252"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.810383" level="INFO">${ellapsed_seconds} = 2654.527</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.809953" elapsed="0.000466"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.810871" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.810518" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.810491" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.808656" elapsed="0.002391"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.811854" level="INFO">${number} = 187</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.811274" elapsed="0.000621"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.813960" level="INFO">${number} = 187</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.813442" elapsed="0.000557"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.816828" level="INFO">${device-port} = 18016</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.815642" elapsed="0.001306"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.820637" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.852842" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.853069" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.820383" elapsed="0.032745"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.854039" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:35.854174" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.819279" elapsed="0.035635"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.855839" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18016 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:35.920657" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.920915" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.855269" elapsed="0.065705"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:35.921087" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:35.921501" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.818676" elapsed="0.102936"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:35.922209" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.817561" elapsed="0.105712"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.815003" elapsed="0.108457"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.814227" elapsed="0.109335"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.812773" elapsed="0.110990"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.812134" elapsed="0.111780"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.924722" level="INFO">${next} = 18017</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.924254" elapsed="0.000506"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.925545" level="INFO">${current_port} = 18017</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:35.925018" elapsed="0.000585"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.807582" elapsed="0.118100"/>
</kw>
<msg time="2026-08-15T23:55:35.925736" level="INFO">Repeating keyword, round 188/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:35.927335" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:35.927181" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.927153" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.927943" level="INFO">${current_Date} = 2026-08-15 23:55:35.928</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:35.927700" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:35.928619" level="INFO">${ellapsed_seconds} = 2654.409</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:35.928198" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.929162" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:35.928766" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:35.928733" elapsed="0.000553"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:35.926842" elapsed="0.002518"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.930247" level="INFO">${number} = 188</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.929591" elapsed="0.000695"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.932458" level="INFO">${number} = 188</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.931941" elapsed="0.000556"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:35.935460" level="INFO">${device-port} = 18017</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:35.934197" elapsed="0.001378"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.938557" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:35.972732" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:35.973015" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.938454" elapsed="0.034622"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:35.974051" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:35.974195" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:35.937581" elapsed="0.037472"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:35.976118" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18017 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.040398" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.040617" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:35.975440" elapsed="0.065231"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.040783" elapsed="0.000117"/>
</return>
<msg time="2026-08-15T23:55:36.041238" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:35.937143" elapsed="0.104204"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.041952" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:35.936326" elapsed="0.106704"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:35.933502" elapsed="0.109736"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:35.932719" elapsed="0.110632"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.931252" elapsed="0.112228"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:35.930508" elapsed="0.113134"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.044590" level="INFO">${next} = 18018</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.044047" elapsed="0.000580"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.045416" level="INFO">${current_port} = 18018</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.044884" elapsed="0.000591"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:35.926031" elapsed="0.119524"/>
</kw>
<msg time="2026-08-15T23:55:36.045609" level="INFO">Repeating keyword, round 189/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.047253" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.047086" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.047058" elapsed="0.000284"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.047824" level="INFO">${current_Date} = 2026-08-15 23:55:36.048</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.047574" elapsed="0.000290"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.048508" level="INFO">${ellapsed_seconds} = 2654.289</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.048073" elapsed="0.000471"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.048994" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.048641" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.048615" elapsed="0.000490"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.046704" elapsed="0.002464"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.049925" level="INFO">${number} = 189</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.049371" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.052013" level="INFO">${number} = 189</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.051490" elapsed="0.000560"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.054953" level="INFO">${device-port} = 18018</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.053782" elapsed="0.001285"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.058359" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.092632" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.092900" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.058256" elapsed="0.034707"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.093883" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:36.094019" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.057213" elapsed="0.037545"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.095691" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18018 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.161121" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.161384" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.095154" elapsed="0.066308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.161591" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:36.162063" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.056760" elapsed="0.105420"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.162756" elapsed="0.001032"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.055748" elapsed="0.108317"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.053140" elapsed="0.111155"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.052331" elapsed="0.112090"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.050855" elapsed="0.113698"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.050205" elapsed="0.114449"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.165993" level="INFO">${next} = 18019</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.165093" elapsed="0.000976"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.167391" level="INFO">${current_port} = 18019</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.166459" elapsed="0.001051"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.045907" elapsed="0.121742"/>
</kw>
<msg time="2026-08-15T23:55:36.167736" level="INFO">Repeating keyword, round 190/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.170375" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.170124" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.170080" elapsed="0.000441"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.171318" level="INFO">${current_Date} = 2026-08-15 23:55:36.171</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.170959" elapsed="0.000418"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.172420" level="INFO">${ellapsed_seconds} = 2654.166</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.171768" elapsed="0.000701"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.172938" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.172574" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.172548" elapsed="0.000506"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.169546" elapsed="0.003573"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.173907" level="INFO">${number} = 190</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.173354" elapsed="0.000591"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.176008" level="INFO">${number} = 190</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.175450" elapsed="0.000596"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.178202" level="INFO">${device-port} = 18019</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.177343" elapsed="0.000941"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.181223" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.212283" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.212393" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.181117" elapsed="0.031303"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.212849" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:55:36.212912" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.180117" elapsed="0.033111"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.213607" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18019 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.281072" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.281322" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.213389" elapsed="0.068004"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.281511" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:55:36.282022" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.179675" elapsed="0.102473"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.282761" elapsed="0.001011"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.178741" elapsed="0.105287"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.176866" elapsed="0.107362"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.176303" elapsed="0.108030"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.174821" elapsed="0.109638"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.174170" elapsed="0.110409"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.285912" level="INFO">${next} = 18020</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.285016" elapsed="0.000962"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.287260" level="INFO">${current_port} = 18020</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.286350" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.168224" elapsed="0.119301"/>
</kw>
<msg time="2026-08-15T23:55:36.287618" level="INFO">Repeating keyword, round 191/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.290269" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.290014" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.289965" elapsed="0.000448"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.291141" level="INFO">${current_Date} = 2026-08-15 23:55:36.291</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.290742" elapsed="0.000458"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.292374" level="INFO">${ellapsed_seconds} = 2654.046</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.291665" elapsed="0.000736"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.292715" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.292474" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.292455" elapsed="0.000338"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.289417" elapsed="0.003439"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.293373" level="INFO">${number} = 191</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.293004" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.294823" level="INFO">${number} = 191</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.294467" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.296849" level="INFO">${device-port} = 18020</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.296051" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.302172" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.332658" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.332925" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.302071" elapsed="0.030916"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.333921" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:36.334056" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.298618" elapsed="0.036163"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.335685" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18020 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.400501" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.400715" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.335161" elapsed="0.065609"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.400923" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:36.401331" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.298191" elapsed="0.103250"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.402045" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.297377" elapsed="0.105760"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.295570" elapsed="0.107757"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.295010" elapsed="0.108481"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.294016" elapsed="0.109601"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.293553" elapsed="0.110160"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.404906" level="INFO">${next} = 18021</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.404108" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.406261" level="INFO">${current_port} = 18021</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.405355" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.288101" elapsed="0.118384"/>
</kw>
<msg time="2026-08-15T23:55:36.406570" level="INFO">Repeating keyword, round 192/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.409171" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.408927" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.408884" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.410091" level="INFO">${current_Date} = 2026-08-15 23:55:36.410</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.409705" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.411203" level="INFO">${ellapsed_seconds} = 2653.927</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.410483" elapsed="0.000779"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.412048" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.411477" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.411431" elapsed="0.000821"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.408371" elapsed="0.003957"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.412857" level="INFO">${number} = 192</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.412477" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.414285" level="INFO">${number} = 192</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.413946" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.416284" level="INFO">${device-port} = 18021</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.415482" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.419012" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.452638" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.452904" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.418913" elapsed="0.034053"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.453921" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:36.454068" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.418055" elapsed="0.036694"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.455856" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18021 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.528612" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.528886" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.455255" elapsed="0.073693"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.529068" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:36.529495" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.417626" elapsed="0.111983"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.530256" elapsed="0.000937"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.416831" elapsed="0.114600"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.415016" elapsed="0.116619"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.414470" elapsed="0.117273"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.413484" elapsed="0.118444"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.413040" elapsed="0.118995"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.533252" level="INFO">${next} = 18022</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.532408" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.534662" level="INFO">${current_port} = 18022</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.533703" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.407052" elapsed="0.127911"/>
</kw>
<msg time="2026-08-15T23:55:36.535057" level="INFO">Repeating keyword, round 193/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.537976" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.537681" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.537636" elapsed="0.000495"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.538886" level="INFO">${current_Date} = 2026-08-15 23:55:36.539</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.538480" elapsed="0.000472"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.540144" level="INFO">${ellapsed_seconds} = 2653.798</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.539363" elapsed="0.000852"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.540564" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.540324" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.540298" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.537114" elapsed="0.003573"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.541213" level="INFO">${number} = 193</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.540848" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.542646" level="INFO">${number} = 193</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.542308" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.544624" level="INFO">${device-port} = 18022</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.543855" elapsed="0.000849"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.547360" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.580622" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.580895" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.547070" elapsed="0.033891"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.581957" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:36.582107" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.546373" elapsed="0.036572"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.583852" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18022 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.652328" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.652555" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.583339" elapsed="0.069275"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.652733" elapsed="0.000117"/>
</return>
<msg time="2026-08-15T23:55:36.653225" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.545959" elapsed="0.107381"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.653942" elapsed="0.000827"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.545158" elapsed="0.109836"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.543385" elapsed="0.111798"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.542847" elapsed="0.112471"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.541858" elapsed="0.113587"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.541396" elapsed="0.114143"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.656661" level="INFO">${next} = 18023</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.655926" elapsed="0.000794"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.658002" level="INFO">${current_port} = 18023</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.657124" elapsed="0.000973"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.535574" elapsed="0.122651"/>
</kw>
<msg time="2026-08-15T23:55:36.658309" level="INFO">Repeating keyword, round 194/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.660633" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.660480" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.660454" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.661307" level="INFO">${current_Date} = 2026-08-15 23:55:36.661</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.661083" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.661992" level="INFO">${ellapsed_seconds} = 2653.676</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.661552" elapsed="0.000476"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.662505" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.662131" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.662102" elapsed="0.000535"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.660097" elapsed="0.002622"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.663529" level="INFO">${number} = 194</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.662964" elapsed="0.000603"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.665555" level="INFO">${number} = 194</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.665081" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.668354" level="INFO">${device-port} = 18023</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.667210" elapsed="0.001259"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.672111" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.704143" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.704367" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.671959" elapsed="0.032466"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.705328" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:36.705462" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.670835" elapsed="0.035331"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.707023" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18023 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.772930" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.773153" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.706515" elapsed="0.066694"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.773316" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:36.773708" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.670235" elapsed="0.103624"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.774418" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.669118" elapsed="0.106374"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.666552" elapsed="0.109127"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.665836" elapsed="0.109942"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.664435" elapsed="0.111512"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.663785" elapsed="0.112259"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.777191" level="INFO">${next} = 18024</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.776416" elapsed="0.000833"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.778492" level="INFO">${current_port} = 18024</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.777606" elapsed="0.000978"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.658719" elapsed="0.119990"/>
</kw>
<msg time="2026-08-15T23:55:36.778794" level="INFO">Repeating keyword, round 195/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.781462" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.781202" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.781156" elapsed="0.000459"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.782372" level="INFO">${current_Date} = 2026-08-15 23:55:36.782</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.781996" elapsed="0.000436"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.783508" level="INFO">${ellapsed_seconds} = 2653.555</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.782758" elapsed="0.000808"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.784337" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.783723" elapsed="0.000669"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.783681" elapsed="0.000736"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.780599" elapsed="0.003864"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.784990" level="INFO">${number} = 195</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.784608" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.786422" level="INFO">${number} = 195</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.786085" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.788521" level="INFO">${device-port} = 18024</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.787613" elapsed="0.000988"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.791081" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.824675" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.824900" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.790982" elapsed="0.033958"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.825500" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:55:36.825586" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.790288" elapsed="0.035769"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.826584" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18024 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:36.897411" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.897640" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.826277" elapsed="0.071420"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:36.897853" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:36.898273" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.789874" elapsed="0.108510"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:36.898990" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.789069" elapsed="0.111036"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.787148" elapsed="0.113146"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.786607" elapsed="0.113788"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.785624" elapsed="0.114894"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.785176" elapsed="0.115438"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.901761" level="INFO">${next} = 18025</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.901008" elapsed="0.000859"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.903151" level="INFO">${current_port} = 18025</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:36.902231" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.779296" elapsed="0.124088"/>
</kw>
<msg time="2026-08-15T23:55:36.903470" level="INFO">Repeating keyword, round 196/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:36.906029" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:36.905748" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.905704" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.906961" level="INFO">${current_Date} = 2026-08-15 23:55:36.907</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:36.906574" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:36.908133" level="INFO">${ellapsed_seconds} = 2653.43</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:36.907404" elapsed="0.000795"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.908637" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:36.908308" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:36.908283" elapsed="0.000464"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:36.905215" elapsed="0.003616"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.909550" level="INFO">${number} = 196</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.909040" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.911584" level="INFO">${number} = 196</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.911093" elapsed="0.000528"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:36.914351" level="INFO">${device-port} = 18025</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:36.913248" elapsed="0.001215"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.918038" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:36.948707" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:36.948972" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.917797" elapsed="0.031236"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:36.949989" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:36.950126" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:36.916871" elapsed="0.033965"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:36.951729" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18025 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.020586" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.020834" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:36.951242" elapsed="0.069653"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.021006" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:37.021408" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:36.916268" elapsed="0.105249"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.022123" elapsed="0.000871"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:36.915140" elapsed="0.108078"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:36.912587" elapsed="0.110825"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:36.911861" elapsed="0.111652"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.910449" elapsed="0.113188"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:36.909823" elapsed="0.113910"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.024916" level="INFO">${next} = 18026</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.024122" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.026237" level="INFO">${current_port} = 18026</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.025341" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:36.903954" elapsed="0.122511"/>
</kw>
<msg time="2026-08-15T23:55:37.026553" level="INFO">Repeating keyword, round 197/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.029142" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.028896" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.028851" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.029975" level="INFO">${current_Date} = 2026-08-15 23:55:37.030</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.029602" elapsed="0.000434"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.031121" level="INFO">${ellapsed_seconds} = 2653.307</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.030367" elapsed="0.000822"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.031902" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.031348" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.031306" elapsed="0.000776"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.028332" elapsed="0.003869"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.032771" level="INFO">${number} = 197</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.032407" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.034229" level="INFO">${number} = 197</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.033886" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.036197" level="INFO">${device-port} = 18026</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.035414" elapsed="0.000863"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.038700" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.072267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.072489" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.038602" elapsed="0.033946"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.073477" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:37.073611" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.037937" elapsed="0.036416"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.075275" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18026 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.140398" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.140614" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.074701" elapsed="0.065967"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.140778" elapsed="0.000121"/>
</return>
<msg time="2026-08-15T23:55:37.141230" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.037507" elapsed="0.103832"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.141944" elapsed="0.000834"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.036709" elapsed="0.106319"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.034953" elapsed="0.108274"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.034413" elapsed="0.108918"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.033423" elapsed="0.110033"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.032976" elapsed="0.110574"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.144683" level="INFO">${next} = 18027</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.143939" elapsed="0.000804"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.146038" level="INFO">${current_port} = 18027</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.145150" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.027032" elapsed="0.119235"/>
</kw>
<msg time="2026-08-15T23:55:37.146352" level="INFO">Repeating keyword, round 198/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.148913" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.148639" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.148596" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.149796" level="INFO">${current_Date} = 2026-08-15 23:55:37.150</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.149451" elapsed="0.000438"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.150925" level="INFO">${ellapsed_seconds} = 2653.187</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.150221" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.151721" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.151197" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.151154" elapsed="0.000779"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.148105" elapsed="0.003930"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.152630" level="INFO">${number} = 198</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.152266" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.154072" level="INFO">${number} = 198</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.153715" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.156060" level="INFO">${device-port} = 18027</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.155271" elapsed="0.000868"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.158705" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.188412" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.188636" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.158462" elapsed="0.030233"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.189616" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:37.189749" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.157777" elapsed="0.032763"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.191444" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18027 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.276382" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.276594" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.190929" elapsed="0.085720"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.276758" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:55:37.277204" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.157365" elapsed="0.119946"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.277907" elapsed="0.000838"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.156571" elapsed="0.122453"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.154780" elapsed="0.124440"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.154262" elapsed="0.125060"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.153271" elapsed="0.126175"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.152826" elapsed="0.126716"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.280679" level="INFO">${next} = 18028</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.279934" elapsed="0.000803"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.282040" level="INFO">${current_port} = 18028</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.281150" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.146771" elapsed="0.135493"/>
</kw>
<msg time="2026-08-15T23:55:37.282351" level="INFO">Repeating keyword, round 199/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.284971" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.284690" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.284648" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.285774" level="INFO">${current_Date} = 2026-08-15 23:55:37.286</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.285437" elapsed="0.000429"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.286917" level="INFO">${ellapsed_seconds} = 2653.051</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.286197" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.287706" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.287189" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.287145" elapsed="0.000772"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.284164" elapsed="0.003854"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.288692" level="INFO">${number} = 199</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.288330" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.290131" level="INFO">${number} = 199</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.289779" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.292125" level="INFO">${device-port} = 18028</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.291322" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.294818" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.328707" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.328970" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.294554" elapsed="0.034476"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.329964" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:37.330099" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.293892" elapsed="0.036978"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.331744" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18028 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.400747" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.401000" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.331262" elapsed="0.069794"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.401166" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:37.401563" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.293457" elapsed="0.108217"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.402280" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.292643" elapsed="0.110729"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.290857" elapsed="0.112708"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.290321" elapsed="0.113346"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.289335" elapsed="0.114454"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.288888" elapsed="0.115046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.405071" level="INFO">${next} = 18029</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.404281" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.406381" level="INFO">${current_port} = 18029</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.405493" elapsed="0.000982"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.282769" elapsed="0.123835"/>
</kw>
<msg time="2026-08-15T23:55:37.406689" level="INFO">Repeating keyword, round 200/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.409261" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.409014" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.408970" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.410185" level="INFO">${current_Date} = 2026-08-15 23:55:37.410</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.409833" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.411333" level="INFO">${ellapsed_seconds} = 2652.927</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.410581" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.411666" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.411432" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.411414" elapsed="0.000332"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.408450" elapsed="0.003342"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.412322" level="INFO">${number} = 200</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.411955" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.413757" level="INFO">${number} = 200</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.413418" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.415751" level="INFO">${device-port} = 18029</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.414971" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.418443" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.452382" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.452604" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.418346" elapsed="0.034317"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.453578" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:37.453711" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.417512" elapsed="0.036905"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.455336" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18029 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.520606" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.520858" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.454768" elapsed="0.066148"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.521028" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:37.521429" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.417098" elapsed="0.104443"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.522140" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.416290" elapsed="0.106949"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.414480" elapsed="0.108948"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.413960" elapsed="0.109568"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.412966" elapsed="0.110684"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.412503" elapsed="0.111243"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.524924" level="INFO">${next} = 18030</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.524137" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.526234" level="INFO">${current_port} = 18030</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.525346" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.407191" elapsed="0.119272"/>
</kw>
<msg time="2026-08-15T23:55:37.526551" level="INFO">Repeating keyword, round 201/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.529110" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.528864" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.528792" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.529948" level="INFO">${current_Date} = 2026-08-15 23:55:37.530</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.529575" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.531109" level="INFO">${ellapsed_seconds} = 2652.807</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.530339" elapsed="0.000839"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.531553" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.531319" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.531295" elapsed="0.000336"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.528307" elapsed="0.003369"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.532200" level="INFO">${number} = 201</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.531837" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.533628" level="INFO">${number} = 201</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.533293" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.535595" level="INFO">${device-port} = 18030</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.534787" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.538291" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.572560" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.572784" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.538195" elapsed="0.034687"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.573756" elapsed="0.000086"/>
</kw>
<msg time="2026-08-15T23:55:37.573921" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.537334" elapsed="0.037290"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.575512" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18030 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.645001" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.645213" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.575024" elapsed="0.070243"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.645376" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:37.645771" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.536922" elapsed="0.109009"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.646493" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.536123" elapsed="0.111468"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.534344" elapsed="0.113435"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.533828" elapsed="0.114097"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.532840" elapsed="0.115210"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.532381" elapsed="0.115762"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.649253" level="INFO">${next} = 18031</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.648480" elapsed="0.000832"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.650563" level="INFO">${current_port} = 18031</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.649674" elapsed="0.000983"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.527048" elapsed="0.123841"/>
</kw>
<msg time="2026-08-15T23:55:37.650983" level="INFO">Repeating keyword, round 202/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.653461" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.653215" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.653173" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.654383" level="INFO">${current_Date} = 2026-08-15 23:55:37.654</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.654036" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.655436" level="INFO">${ellapsed_seconds} = 2652.683</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.654854" elapsed="0.000618"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.655916" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.655571" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.655545" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.652652" elapsed="0.003439"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.656829" level="INFO">${number} = 202</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.656294" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.658848" level="INFO">${number} = 202</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.658345" elapsed="0.000542"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.661591" level="INFO">${device-port} = 18031</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.660484" elapsed="0.001221"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.665511" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.696360" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.696596" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.665375" elapsed="0.031282"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.697587" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:37.697720" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.664106" elapsed="0.034327"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.699341" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18031 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.764640" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.764906" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.698844" elapsed="0.066121"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.765081" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:37.765490" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.663504" elapsed="0.102098"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.766221" elapsed="0.000954"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.662345" elapsed="0.105029"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.659862" elapsed="0.107703"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.659109" elapsed="0.108559"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.657706" elapsed="0.110087"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.657085" elapsed="0.110856"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.769101" level="INFO">${next} = 18032</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.768292" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.770428" level="INFO">${current_port} = 18032</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.769527" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.651401" elapsed="0.119253"/>
</kw>
<msg time="2026-08-15T23:55:37.770761" level="INFO">Repeating keyword, round 203/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.773445" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.773199" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.773157" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.774289" level="INFO">${current_Date} = 2026-08-15 23:55:37.774</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.773944" elapsed="0.000405"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.775387" level="INFO">${ellapsed_seconds} = 2652.563</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.774677" elapsed="0.000737"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.775726" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.775485" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.775465" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.772601" elapsed="0.003267"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.776469" level="INFO">${number} = 203</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.776016" elapsed="0.000480"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.777923" level="INFO">${number} = 203</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.777569" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.779901" level="INFO">${device-port} = 18032</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.779114" elapsed="0.000868"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.784716" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.816198" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.816417" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.784617" elapsed="0.031858"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.817389" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:37.817526" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.781624" elapsed="0.036633"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.819149" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18032 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:37.884599" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.884846" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.818604" elapsed="0.066301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:37.885015" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:37.885420" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.781218" elapsed="0.104312"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:37.886124" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.780413" elapsed="0.106834"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.778623" elapsed="0.108809"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.778108" elapsed="0.109424"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.777123" elapsed="0.110529"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.776658" elapsed="0.111088"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.888923" level="INFO">${next} = 18033</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.888138" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.890285" level="INFO">${current_port} = 18033</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:37.889344" elapsed="0.001046"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.771323" elapsed="0.119197"/>
</kw>
<msg time="2026-08-15T23:55:37.890604" level="INFO">Repeating keyword, round 204/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:37.893173" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:37.892922" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.892879" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.894093" level="INFO">${current_Date} = 2026-08-15 23:55:37.894</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:37.893713" elapsed="0.000439"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:37.895248" level="INFO">${ellapsed_seconds} = 2652.443</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:37.894481" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.895722" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:37.895387" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:37.895361" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:37.892363" elapsed="0.003554"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.896623" level="INFO">${number} = 204</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.896118" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.898648" level="INFO">${number} = 204</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.898164" elapsed="0.000523"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:37.901486" level="INFO">${device-port} = 18033</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:37.900311" elapsed="0.001290"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.905404" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:37.936577" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:37.936828" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.905266" elapsed="0.031625"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:37.937756" elapsed="0.000085"/>
</kw>
<msg time="2026-08-15T23:55:37.937924" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:37.904003" elapsed="0.034596"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:37.939559" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18033 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.008845" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.009241" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:37.939073" elapsed="0.070232"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.009479" elapsed="0.000123"/>
</return>
<msg time="2026-08-15T23:55:38.010065" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:37.903403" elapsed="0.106779"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.010997" elapsed="0.001106"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:37.902250" elapsed="0.110056"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:37.899654" elapsed="0.112853"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:37.898930" elapsed="0.113690"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.897517" elapsed="0.115238"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:37.896898" elapsed="0.116029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.014204" level="INFO">${next} = 18034</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.013306" elapsed="0.000962"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.015497" level="INFO">${current_port} = 18034</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.014717" elapsed="0.000841"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:37.891104" elapsed="0.124543"/>
</kw>
<msg time="2026-08-15T23:55:38.015706" level="INFO">Repeating keyword, round 205/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.017499" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.017330" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.017298" elapsed="0.000293"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.018067" level="INFO">${current_Date} = 2026-08-15 23:55:38.018</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.017822" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.018793" level="INFO">${ellapsed_seconds} = 2652.319</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.018316" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.019303" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.018950" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.018923" elapsed="0.000491"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.016980" elapsed="0.002497"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.020221" level="INFO">${number} = 205</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.019680" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.022266" level="INFO">${number} = 205</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.021762" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.025177" level="INFO">${device-port} = 18034</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.024013" elapsed="0.001279"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.028736" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.060450" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.060681" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.028423" elapsed="0.032316"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.061702" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:38.061870" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.027682" elapsed="0.035002"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.063564" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18034 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.128577" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.128857" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.063075" elapsed="0.065853"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.129156" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:38.129518" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.027240" elapsed="0.102375"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.130147" elapsed="0.000755"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.025969" elapsed="0.105155"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.023318" elapsed="0.108077"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.022529" elapsed="0.108978"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.021131" elapsed="0.110552"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.020478" elapsed="0.111275"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.133542" level="INFO">${next} = 18035</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.132314" elapsed="0.001271"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.134886" level="INFO">${current_port} = 18035</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.134078" elapsed="0.000912"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.016091" elapsed="0.119008"/>
</kw>
<msg time="2026-08-15T23:55:38.135156" level="INFO">Repeating keyword, round 206/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.137090" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.136901" elapsed="0.000259"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.136866" elapsed="0.000392"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.137904" level="INFO">${current_Date} = 2026-08-15 23:55:38.138</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.137611" elapsed="0.000333"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.138766" level="INFO">${ellapsed_seconds} = 2652.199</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.138227" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.139412" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.139009" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.138980" elapsed="0.000547"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.136396" elapsed="0.003196"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.140503" level="INFO">${number} = 206</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.139858" elapsed="0.000707"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.143128" level="INFO">${number} = 206</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.142473" elapsed="0.000703"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.145475" level="INFO">${device-port} = 18035</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.144626" elapsed="0.000932"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.148500" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.180355" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.180586" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.148394" elapsed="0.032255"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.181609" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:38.181747" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.147546" elapsed="0.034987"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.183450" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18035 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.248893" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.249140" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.182956" elapsed="0.066248"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.249322" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:38.249757" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.147087" elapsed="0.102830"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.250582" elapsed="0.000985"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.146158" elapsed="0.105608"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.144084" elapsed="0.107935"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.143405" elapsed="0.108736"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.141614" elapsed="0.110670"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.140866" elapsed="0.111517"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.253600" level="INFO">${next} = 18036</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.252737" elapsed="0.000924"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.255075" level="INFO">${current_port} = 18036</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.254082" elapsed="0.001111"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.135445" elapsed="0.119882"/>
</kw>
<msg time="2026-08-15T23:55:38.255415" level="INFO">Repeating keyword, round 207/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.258222" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.257922" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.257875" elapsed="0.000495"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.259194" level="INFO">${current_Date} = 2026-08-15 23:55:38.259</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.258763" elapsed="0.000495"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.259755" level="INFO">${ellapsed_seconds} = 2652.078</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.259429" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.260156" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.259873" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.259852" elapsed="0.000388"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.257322" elapsed="0.002966"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.260828" level="INFO">${number} = 207</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.260436" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.262324" level="INFO">${number} = 207</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.261959" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.264434" level="INFO">${device-port} = 18036</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.263595" elapsed="0.000923"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.267230" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.300197" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.300424" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.267112" elapsed="0.033374"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.301470" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:38.301611" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.266342" elapsed="0.036127"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.303392" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18036 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.372650" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.372907" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.302872" elapsed="0.070096"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.373086" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:38.373524" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.265890" elapsed="0.107748"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.374311" elapsed="0.000997"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.265013" elapsed="0.110520"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.263129" elapsed="0.112618"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.262558" elapsed="0.113345"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.261487" elapsed="0.114568"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.261014" elapsed="0.115174"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.377543" level="INFO">${next} = 18037</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.376591" elapsed="0.001026"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.379101" level="INFO">${current_port} = 18037</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.378096" elapsed="0.001117"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.255899" elapsed="0.123453"/>
</kw>
<msg time="2026-08-15T23:55:38.379441" level="INFO">Repeating keyword, round 208/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.382094" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.381834" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.381759" elapsed="0.000565"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.383231" level="INFO">${current_Date} = 2026-08-15 23:55:38.383</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.382847" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.383979" level="INFO">${ellapsed_seconds} = 2651.954</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.383495" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.384476" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.384132" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.384097" elapsed="0.000490"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.381254" elapsed="0.003398"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.385425" level="INFO">${number} = 208</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.384882" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.387551" level="INFO">${number} = 208</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.387052" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.390494" level="INFO">${device-port} = 18037</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.389314" elapsed="0.001296"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.394314" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.424594" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.424862" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.394160" elapsed="0.030798"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.426066" elapsed="0.000077"/>
</kw>
<msg time="2026-08-15T23:55:38.426241" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.393093" elapsed="0.033998"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.428070" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18037 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.497956" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.498388" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.427521" elapsed="0.070935"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.498682" elapsed="0.000449"/>
</return>
<msg time="2026-08-15T23:55:38.500089" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.392443" elapsed="0.107879"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.501670" elapsed="0.001245"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.391279" elapsed="0.111846"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.388589" elapsed="0.114741"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.387836" elapsed="0.115604"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.386373" elapsed="0.117204"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.385683" elapsed="0.117999"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.504974" level="INFO">${next} = 18038</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.504090" elapsed="0.000947"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.506455" level="INFO">${current_port} = 18038</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.505419" elapsed="0.001142"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.379906" elapsed="0.126796"/>
</kw>
<msg time="2026-08-15T23:55:38.506794" level="INFO">Repeating keyword, round 209/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.508896" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.508700" elapsed="0.000259"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.508666" elapsed="0.000327"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.509547" level="INFO">${current_Date} = 2026-08-15 23:55:38.509</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.509276" elapsed="0.000335"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.510419" level="INFO">${ellapsed_seconds} = 2651.828</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.509875" elapsed="0.000585"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.510976" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.510562" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.510534" elapsed="0.000558"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.508337" elapsed="0.002820"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.512059" level="INFO">${number} = 209</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.511362" elapsed="0.000737"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.514209" level="INFO">${number} = 209</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.513690" elapsed="0.000558"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.517349" level="INFO">${device-port} = 18038</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.516197" elapsed="0.001269"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.520694" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.549099" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.549327" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.520563" elapsed="0.028824"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.550364" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:38.550506" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.519848" elapsed="0.031462"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.552183" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18038 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.620911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.621140" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.551662" elapsed="0.069536"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.621313" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:38.621729" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.519361" elapsed="0.102523"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.622612" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.518116" elapsed="0.105640"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.515352" elapsed="0.108653"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.514496" elapsed="0.109614"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.513035" elapsed="0.111200"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.512325" elapsed="0.112006"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.625501" level="INFO">${next} = 18039</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.624687" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.626952" level="INFO">${current_port} = 18039</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.625973" elapsed="0.001080"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.507399" elapsed="0.119950"/>
</kw>
<msg time="2026-08-15T23:55:38.627693" level="INFO">Repeating keyword, round 210/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.631416" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.631146" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.631092" elapsed="0.000474"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.632461" level="INFO">${current_Date} = 2026-08-15 23:55:38.632</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.632120" elapsed="0.000371"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.632994" level="INFO">${ellapsed_seconds} = 2651.705</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.632646" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.633348" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.633095" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.633076" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.630453" elapsed="0.003023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.634020" level="INFO">${number} = 210</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.633624" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.635520" level="INFO">${number} = 210</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.635159" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.637619" level="INFO">${device-port} = 18039</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.636818" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.640995" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.673583" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.674000" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.640249" elapsed="0.033821"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.675348" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:38.675498" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.639485" elapsed="0.036898"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.677370" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18039 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.740287" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.740502" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.676787" elapsed="0.063770"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.740674" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:38.741167" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.639065" elapsed="0.102210"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.741887" elapsed="0.001005"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.638213" elapsed="0.104879"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.636330" elapsed="0.106954"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.635710" elapsed="0.107679"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.634683" elapsed="0.108836"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.634206" elapsed="0.109413"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.745023" level="INFO">${next} = 18040</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.744012" elapsed="0.001077"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.746448" level="INFO">${current_port} = 18040</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.745470" elapsed="0.001080"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.628366" elapsed="0.118322"/>
</kw>
<msg time="2026-08-15T23:55:38.746782" level="INFO">Repeating keyword, round 211/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.749661" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.749392" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.749343" elapsed="0.000539"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.750764" level="INFO">${current_Date} = 2026-08-15 23:55:38.751</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.750335" elapsed="0.000550"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.751778" level="INFO">${ellapsed_seconds} = 2651.586</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.751253" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.752353" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.751969" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.751940" elapsed="0.000573"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.748712" elapsed="0.003880"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.753432" level="INFO">${number} = 211</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.752842" elapsed="0.000630"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.755646" level="INFO">${number} = 211</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.755055" elapsed="0.000632"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.758867" level="INFO">${device-port} = 18040</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.757537" elapsed="0.001468"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.762970" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.788735" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.789055" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.762462" elapsed="0.026677"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.790317" elapsed="0.000076"/>
</kw>
<msg time="2026-08-15T23:55:38.790482" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.761430" elapsed="0.029817"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.792131" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18040 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.856434" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.856652" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.791604" elapsed="0.065104"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.856857" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:38.857268" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.760788" elapsed="0.096591"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.857976" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.759654" elapsed="0.099445"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.756828" elapsed="0.102465"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.755937" elapsed="0.103457"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.754389" elapsed="0.105128"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.753696" elapsed="0.105915"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.860756" level="INFO">${next} = 18041</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.860001" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.862118" level="INFO">${current_port} = 18041</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.861232" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.747314" elapsed="0.115054"/>
</kw>
<msg time="2026-08-15T23:55:38.862457" level="INFO">Repeating keyword, round 212/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.865088" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.864833" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.864762" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.866024" level="INFO">${current_Date} = 2026-08-15 23:55:38.866</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.865637" elapsed="0.000447"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.867209" level="INFO">${ellapsed_seconds} = 2651.471</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.866476" elapsed="0.000801"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.867745" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.867410" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.867384" elapsed="0.000496"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.864273" elapsed="0.003672"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.868668" level="INFO">${number} = 212</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.868153" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.870704" level="INFO">${number} = 212</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.870229" elapsed="0.000513"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.873631" level="INFO">${device-port} = 18041</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.872387" elapsed="0.001377"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.877749" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:38.908570" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.908858" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.877609" elapsed="0.031314"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.909893" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:38.910036" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.876343" elapsed="0.034506"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.911716" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18041 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:38.976629" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:38.976882" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.911222" elapsed="0.065719"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:38.977056" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:38.977468" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.875707" elapsed="0.101870"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:38.978218" elapsed="0.001025"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.874488" elapsed="0.105013"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.871720" elapsed="0.108019"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.870987" elapsed="0.108939"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.869571" elapsed="0.110524"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.868945" elapsed="0.111267"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.981618" level="INFO">${next} = 18042</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.980628" elapsed="0.001057"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.983112" level="INFO">${current_port} = 18042</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:38.982168" elapsed="0.001046"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.862938" elapsed="0.120502"/>
</kw>
<msg time="2026-08-15T23:55:38.983529" level="INFO">Repeating keyword, round 213/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:38.986246" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:38.985941" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.985895" elapsed="0.000496"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.987113" level="INFO">${current_Date} = 2026-08-15 23:55:38.987</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:38.986720" elapsed="0.000449"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:38.987845" level="INFO">${ellapsed_seconds} = 2651.35</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:38.987381" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:38.988367" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:38.988004" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:38.987968" elapsed="0.000512"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:38.985330" elapsed="0.003214"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.989285" level="INFO">${number} = 213</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.988748" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.991327" level="INFO">${number} = 213</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.990849" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:38.994171" level="INFO">${device-port} = 18042</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:38.993033" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:38.998217" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.028650" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.028751" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:38.998033" elapsed="0.030744"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.029206" elapsed="0.000044"/>
</kw>
<msg time="2026-08-15T23:55:39.029340" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:38.996648" elapsed="0.033473"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.030996" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18042 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.100676" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.100933" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.030477" elapsed="0.070514"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.101104" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:39.101508" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:38.996075" elapsed="0.105570"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.102313" elapsed="0.000895"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:38.994933" elapsed="0.108470"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:38.992340" elapsed="0.111255"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:38.991585" elapsed="0.112109"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.990205" elapsed="0.113654"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:38.989541" elapsed="0.114418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.105096" level="INFO">${next} = 18043</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.104306" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.106476" level="INFO">${current_port} = 18043</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.105516" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:38.983997" elapsed="0.122704"/>
</kw>
<msg time="2026-08-15T23:55:39.106787" level="INFO">Repeating keyword, round 214/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.108554" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.108400" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.108374" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.109139" level="INFO">${current_Date} = 2026-08-15 23:55:39.109</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.108916" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.109840" level="INFO">${ellapsed_seconds} = 2651.228</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.109386" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.110323" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.109978" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.109952" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.108060" elapsed="0.002435"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.111271" level="INFO">${number} = 214</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.110699" elapsed="0.000611"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.113623" level="INFO">${number} = 214</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.113023" elapsed="0.000651"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.117182" level="INFO">${device-port} = 18043</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.115420" elapsed="0.002043"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.124126" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.152842" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.153066" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.123674" elapsed="0.029452"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.154082" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:39.154218" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.121639" elapsed="0.033287"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.155761" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18043 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.224448" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.224682" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.155277" elapsed="0.069465"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.224904" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:39.225346" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.120509" elapsed="0.104954"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.226141" elapsed="0.000958"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.118593" elapsed="0.108711"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.114761" elapsed="0.112746"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.113962" elapsed="0.113653"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.112295" elapsed="0.115451"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.111560" elapsed="0.116335"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.229134" level="INFO">${next} = 18044</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.228277" elapsed="0.000925"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.230640" level="INFO">${current_port} = 18044</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.229589" elapsed="0.001156"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.107226" elapsed="0.123724"/>
</kw>
<msg time="2026-08-15T23:55:39.231046" level="INFO">Repeating keyword, round 215/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.233713" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.233453" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.233407" elapsed="0.000495"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.234669" level="INFO">${current_Date} = 2026-08-15 23:55:39.234</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.234298" elapsed="0.000435"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.235517" level="INFO">${ellapsed_seconds} = 2651.103</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.235125" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.235867" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.235614" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.235594" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.232880" elapsed="0.003113"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.236506" level="INFO">${number} = 215</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.236138" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.237952" level="INFO">${number} = 215</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.237595" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.239937" level="INFO">${device-port} = 18044</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.239143" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.245067" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.276461" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.276684" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.244966" elapsed="0.031777"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.277661" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:39.277794" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.241666" elapsed="0.036919"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.279459" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18044 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.348904" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.349115" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.278969" elapsed="0.070201"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.349280" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:39.349705" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.241255" elapsed="0.108605"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.350474" elapsed="0.000928"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.240455" elapsed="0.111137"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.238670" elapsed="0.113112"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.238150" elapsed="0.113773"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.237150" elapsed="0.114900"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.236687" elapsed="0.115460"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.353363" level="INFO">${next} = 18045</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.352521" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.354726" level="INFO">${current_port} = 18045</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.353842" elapsed="0.001043"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.231499" elapsed="0.123518"/>
</kw>
<msg time="2026-08-15T23:55:39.355102" level="INFO">Repeating keyword, round 216/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.357648" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.357405" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.357363" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.358450" level="INFO">${current_Date} = 2026-08-15 23:55:39.358</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.358227" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.359183" level="INFO">${ellapsed_seconds} = 2650.979</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.358695" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.359683" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.359350" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.359319" elapsed="0.000473"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.356877" elapsed="0.003004"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.360626" level="INFO">${number} = 216</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.360083" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.362646" level="INFO">${number} = 216</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.362174" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.365525" level="INFO">${device-port} = 18045</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.364301" elapsed="0.001336"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.369390" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.400430" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.400652" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.369252" elapsed="0.031457"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.401715" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:39.401885" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.367997" elapsed="0.034704"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.403597" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18045 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.472504" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.472718" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.403111" elapsed="0.069661"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.472921" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:39.473321" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.367403" elapsed="0.106026"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.474051" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.366299" elapsed="0.108819"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.363651" elapsed="0.111654"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.362928" elapsed="0.112477"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.361520" elapsed="0.114007"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.360901" elapsed="0.114721"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.476747" level="INFO">${next} = 18046</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.476007" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.478104" level="INFO">${current_port} = 18046</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.477210" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.355556" elapsed="0.122801"/>
</kw>
<msg time="2026-08-15T23:55:39.478441" level="INFO">Repeating keyword, round 217/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.481171" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.480923" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.480879" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.482160" level="INFO">${current_Date} = 2026-08-15 23:55:39.482</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.481641" elapsed="0.000611"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.482839" level="INFO">${ellapsed_seconds} = 2650.855</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.482493" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.483181" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.482942" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.482922" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.480353" elapsed="0.002953"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.483835" level="INFO">${number} = 217</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.483451" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.485349" level="INFO">${number} = 217</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.485014" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.487350" level="INFO">${device-port} = 18046</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.486550" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.490121" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.524485" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.524714" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.489837" elapsed="0.034936"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.525718" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:39.525914" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.489146" elapsed="0.037545"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.527549" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18046 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.592632" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.592873" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.527069" elapsed="0.065863"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.593042" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:39.593446" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.488672" elapsed="0.104885"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.594204" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.487894" elapsed="0.107388"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.486099" elapsed="0.109371"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.485534" elapsed="0.110036"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.484554" elapsed="0.111140"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.484088" elapsed="0.111701"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.596998" level="INFO">${next} = 18047</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.596186" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.598348" level="INFO">${current_port} = 18047</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.597418" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.478964" elapsed="0.119607"/>
</kw>
<msg time="2026-08-15T23:55:39.598655" level="INFO">Repeating keyword, round 218/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.601228" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.600981" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.600937" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.602212" level="INFO">${current_Date} = 2026-08-15 23:55:39.602</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.601766" elapsed="0.000515"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.602774" level="INFO">${ellapsed_seconds} = 2650.735</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.602468" elapsed="0.000346"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.603123" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.602887" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.602869" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.600418" elapsed="0.002830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.603787" level="INFO">${number} = 218</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.603395" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.605235" level="INFO">${number} = 218</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.604891" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.607278" level="INFO">${device-port} = 18047</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.606441" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.609849" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.648540" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.648778" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.609721" elapsed="0.039159"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.649928" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:55:39.650094" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.609058" elapsed="0.041785"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.651786" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18047 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.720571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.720884" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.651272" elapsed="0.069681"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.721095" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:39.721571" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.608620" elapsed="0.113063"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.722370" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.607822" elapsed="0.115708"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.605977" elapsed="0.117749"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.605422" elapsed="0.118454"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.604430" elapsed="0.119581"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.603985" elapsed="0.120126"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.725329" level="INFO">${next} = 18048</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.724466" elapsed="0.000924"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.726582" level="INFO">${current_port} = 18048</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.725849" elapsed="0.000793"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.599129" elapsed="0.127596"/>
</kw>
<msg time="2026-08-15T23:55:39.726781" level="INFO">Repeating keyword, round 219/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.728474" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.728313" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.728283" elapsed="0.000284"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.729036" level="INFO">${current_Date} = 2026-08-15 23:55:39.729</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.728779" elapsed="0.000296"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.729760" level="INFO">${ellapsed_seconds} = 2650.608</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.729286" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.730268" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.729921" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.729893" elapsed="0.000485"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.727969" elapsed="0.002473"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.731181" level="INFO">${number} = 219</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.730646" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.733223" level="INFO">${number} = 219</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.732720" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.736090" level="INFO">${device-port} = 18048</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.734926" elapsed="0.001276"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.739484" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.814957" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.815192" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.739381" elapsed="0.075870"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.816202" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:39.816339" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.738637" elapsed="0.078492"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.818112" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18048 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:39.888614" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.888899" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.817494" elapsed="0.071466"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:39.889087" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:39.889538" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.738129" elapsed="0.151522"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:39.890402" elapsed="0.000999"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.736883" elapsed="0.154713"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.734273" elapsed="0.157522"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.733486" elapsed="0.158462"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.732092" elapsed="0.159989"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.731438" elapsed="0.160743"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.893357" level="INFO">${next} = 18049</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.892532" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.894910" level="INFO">${current_port} = 18049</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:39.893873" elapsed="0.001139"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.727121" elapsed="0.168026"/>
</kw>
<msg time="2026-08-15T23:55:39.895236" level="INFO">Repeating keyword, round 220/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:39.898044" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:39.897730" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.897625" elapsed="0.000579"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.898713" level="INFO">${current_Date} = 2026-08-15 23:55:39.899</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:39.898534" elapsed="0.000207"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:39.899264" level="INFO">${ellapsed_seconds} = 2650.438</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:39.898911" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.899620" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:39.899364" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:39.899345" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:39.897133" elapsed="0.002613"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.900279" level="INFO">${number} = 220</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.899909" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.901969" level="INFO">${number} = 220</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.901501" elapsed="0.000496"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:39.904103" level="INFO">${device-port} = 18049</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:39.903287" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.906750" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:39.940275" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:39.940518" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.906649" elapsed="0.033931"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:39.941509" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:39.941668" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:39.905967" elapsed="0.036446"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:39.943288" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18049 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.008427" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.008649" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:39.942769" elapsed="0.065936"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.008859" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:40.009274" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:39.905507" elapsed="0.103877"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.010021" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:39.904640" elapsed="0.106459"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:39.902780" elapsed="0.108510"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:39.902180" elapsed="0.109212"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.900996" elapsed="0.110520"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:39.900463" elapsed="0.111150"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.012753" level="INFO">${next} = 18050</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.012002" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.014193" level="INFO">${current_port} = 18050</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.013227" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:39.895684" elapsed="0.118655"/>
</kw>
<msg time="2026-08-15T23:55:40.014394" level="INFO">Repeating keyword, round 221/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.016036" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.015879" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.015848" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.016548" level="INFO">${current_Date} = 2026-08-15 23:55:40.016</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.016331" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.017247" level="INFO">${ellapsed_seconds} = 2650.321</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.016796" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.017725" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.017381" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.017354" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.015482" elapsed="0.002439"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.018631" level="INFO">${number} = 221</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.018126" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.020690" level="INFO">${number} = 221</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.020207" elapsed="0.000521"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.023543" level="INFO">${device-port} = 18050</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.022404" elapsed="0.001253"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.026627" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.060580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.060888" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.026519" elapsed="0.034436"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.061976" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:40.062120" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.025746" elapsed="0.037377"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.064392" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18050 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.128938" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.129215" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.063623" elapsed="0.065650"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.129409" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:40.129961" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.025264" elapsed="0.104814"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.130688" elapsed="0.001102"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.024414" elapsed="0.107665"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.021746" elapsed="0.110592"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.020973" elapsed="0.111509"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.019529" elapsed="0.113096"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.018906" elapsed="0.113852"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.135585" level="INFO">${next} = 18051</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.135067" elapsed="0.000557"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.136462" level="INFO">${current_port} = 18051</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.135897" elapsed="0.000626"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.014659" elapsed="0.121949"/>
</kw>
<msg time="2026-08-15T23:55:40.136665" level="INFO">Repeating keyword, round 222/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.141943" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.141748" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.141716" elapsed="0.000320"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.142552" level="INFO">${current_Date} = 2026-08-15 23:55:40.142</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.142308" elapsed="0.000283"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.143287" level="INFO">${ellapsed_seconds} = 2650.195</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.142828" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.143769" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.143423" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.143397" elapsed="0.000508"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.141337" elapsed="0.002642"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.144701" level="INFO">${number} = 222</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.144184" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.146688" level="INFO">${number} = 222</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.146337" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.148711" level="INFO">${device-port} = 18051</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.147933" elapsed="0.000857"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.151450" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.180763" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.181029" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.151170" elapsed="0.029918"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.182043" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:40.182214" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.150482" elapsed="0.032505"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.183862" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18051 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.252562" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.252777" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.183347" elapsed="0.069542"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.253028" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:40.253508" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.150071" elapsed="0.103562"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.254329" elapsed="0.000976"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.149255" elapsed="0.106288"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.147465" elapsed="0.108317"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.146895" elapsed="0.109066"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.145653" elapsed="0.110439"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.144990" elapsed="0.111200"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.257509" level="INFO">${next} = 18052</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.256539" elapsed="0.001037"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.258929" level="INFO">${current_port} = 18052</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.257994" elapsed="0.001034"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.138231" elapsed="0.120927"/>
</kw>
<msg time="2026-08-15T23:55:40.259246" level="INFO">Repeating keyword, round 223/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.262015" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.261735" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.261690" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.262605" level="INFO">${current_Date} = 2026-08-15 23:55:40.263</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.262440" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.263120" level="INFO">${ellapsed_seconds} = 2650.074</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.262781" elapsed="0.000365"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.263463" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.263217" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.263198" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.261140" elapsed="0.002455"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.264187" level="INFO">${number} = 223</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.263794" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.265682" level="INFO">${number} = 223</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.265284" elapsed="0.000425"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.267672" level="INFO">${device-port} = 18052</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.266887" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.270377" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.304404" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.304631" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.270129" elapsed="0.034561"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.305647" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:40.305783" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.269433" elapsed="0.037101"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.307393" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18052 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.372363" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.372583" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.306911" elapsed="0.065727"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.372752" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:55:40.373227" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.269026" elapsed="0.104312"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.373973" elapsed="0.000880"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.268219" elapsed="0.106832"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.266419" elapsed="0.108825"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.265886" elapsed="0.109459"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.264835" elapsed="0.110633"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.264370" elapsed="0.111193"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.376719" level="INFO">${next} = 18053</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.375962" elapsed="0.000817"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.378115" level="INFO">${current_port} = 18053</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.377193" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.259716" elapsed="0.118627"/>
</kw>
<msg time="2026-08-15T23:55:40.378430" level="INFO">Repeating keyword, round 224/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.380981" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.380700" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.380658" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.381963" level="INFO">${current_Date} = 2026-08-15 23:55:40.382</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.381571" elapsed="0.000452"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.382702" level="INFO">${ellapsed_seconds} = 2649.955</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.382382" elapsed="0.000346"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.383056" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.382812" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.382781" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.380173" elapsed="0.003009"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.383695" level="INFO">${number} = 224</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.383328" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.385151" level="INFO">${number} = 224</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.384791" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.387174" level="INFO">${device-port} = 18053</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.386381" elapsed="0.000873"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.389880" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.424478" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.424703" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.389760" elapsed="0.035002"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.425718" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:40.425890" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.388924" elapsed="0.037696"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.427484" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18053 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.496571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.496787" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.427003" elapsed="0.069884"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.497003" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:40.497433" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.388493" elapsed="0.109053"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.498150" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.387692" elapsed="0.111561"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.385928" elapsed="0.113513"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.385339" elapsed="0.114202"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.384347" elapsed="0.115317"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.383894" elapsed="0.115865"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.500935" level="INFO">${next} = 18054</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.500148" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.502271" level="INFO">${current_port} = 18054</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.501402" elapsed="0.000929"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.378909" elapsed="0.123503"/>
</kw>
<msg time="2026-08-15T23:55:40.502466" level="INFO">Repeating keyword, round 225/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.504183" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.504015" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.503868" elapsed="0.000405"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.504694" level="INFO">${current_Date} = 2026-08-15 23:55:40.505</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.504479" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.505517" level="INFO">${ellapsed_seconds} = 2649.832</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.505000" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.506043" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.505666" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.505637" elapsed="0.000528"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.503543" elapsed="0.002688"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.507014" level="INFO">${number} = 225</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.506446" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.509098" level="INFO">${number} = 225</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.508597" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.511990" level="INFO">${device-port} = 18054</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.510844" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.515493" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.548374" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.548594" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.515391" elapsed="0.033262"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.549590" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:40.549723" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.514504" elapsed="0.035951"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.551330" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18054 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.616401" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.616633" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.550797" elapsed="0.065892"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.616847" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:40.617292" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.513960" elapsed="0.103483"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.618087" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.512726" elapsed="0.106478"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.510185" elapsed="0.109214"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.509408" elapsed="0.110091"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.507960" elapsed="0.111662"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.507283" elapsed="0.112433"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.620913" level="INFO">${next} = 18055</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.620106" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.622371" level="INFO">${current_port} = 18055</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.621445" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.502732" elapsed="0.119783"/>
</kw>
<msg time="2026-08-15T23:55:40.622570" level="INFO">Repeating keyword, round 226/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.624185" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.624029" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.624001" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.624748" level="INFO">${current_Date} = 2026-08-15 23:55:40.625</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.624526" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.625471" level="INFO">${ellapsed_seconds} = 2649.712</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.625014" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.625964" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.625608" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.625582" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.623672" elapsed="0.002470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.626877" level="INFO">${number} = 226</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.626346" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.628886" level="INFO">${number} = 226</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.628394" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.631713" level="INFO">${device-port} = 18055</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.630601" elapsed="0.001253"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.635942" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.668365" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.668587" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.635688" elapsed="0.032969"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.669671" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:40.669852" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.634277" elapsed="0.036307"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.671480" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18055 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.736446" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.736657" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.670986" elapsed="0.065725"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.736851" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:40.737314" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.633664" elapsed="0.103770"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.738054" elapsed="0.000889"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.632529" elapsed="0.106605"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.629972" elapsed="0.109365"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.629144" elapsed="0.110302"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.627754" elapsed="0.111846"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.627131" elapsed="0.112590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.741034" level="INFO">${next} = 18056</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.740169" elapsed="0.000940"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.742491" level="INFO">${current_port} = 18056</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.741557" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.622883" elapsed="0.119766"/>
</kw>
<msg time="2026-08-15T23:55:40.742705" level="INFO">Repeating keyword, round 227/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.744312" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.744149" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.744122" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.744837" level="INFO">${current_Date} = 2026-08-15 23:55:40.745</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.744604" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.745536" level="INFO">${ellapsed_seconds} = 2649.592</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.745082" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.746032" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.745673" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.745647" elapsed="0.000502"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.743784" elapsed="0.002431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.746960" level="INFO">${number} = 227</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.746420" elapsed="0.000577"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.749025" level="INFO">${number} = 227</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.748492" elapsed="0.000572"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.751783" level="INFO">${device-port} = 18056</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.750688" elapsed="0.001236"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.758013" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.788039" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.788259" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.757903" elapsed="0.030414"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.789272" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:40.789418" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.754447" elapsed="0.035723"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.791019" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18056 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.856845" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.857065" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.790511" elapsed="0.066609"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.857260" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:40.857669" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.753846" elapsed="0.103932"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.858385" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.752533" elapsed="0.106939"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.750062" elapsed="0.109600"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.749308" elapsed="0.110454"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.747857" elapsed="0.112074"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.747213" elapsed="0.112814"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.861166" level="INFO">${next} = 18057</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.860371" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.862510" level="INFO">${current_port} = 18057</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.861612" elapsed="0.000992"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.743016" elapsed="0.119715"/>
</kw>
<msg time="2026-08-15T23:55:40.862878" level="INFO">Repeating keyword, round 228/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.865431" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.865137" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.865094" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.866366" level="INFO">${current_Date} = 2026-08-15 23:55:40.866</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.866004" elapsed="0.000393"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.866880" level="INFO">${ellapsed_seconds} = 2649.471</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.866544" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.867219" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.866977" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.866958" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.864575" elapsed="0.002768"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.867867" level="INFO">${number} = 228</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.867489" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.869297" level="INFO">${number} = 228</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.868947" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.871279" level="INFO">${device-port} = 18057</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.870477" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.874009" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:40.908314" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.908535" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.873897" elapsed="0.034696"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.909556" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:40.909692" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.873033" elapsed="0.037381"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.911274" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18057 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:40.976706" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:40.976966" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.910764" elapsed="0.066258"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:40.977168" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:40.977578" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.872607" elapsed="0.105129"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:40.978375" elapsed="0.000887"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.871822" elapsed="0.107632"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.870028" elapsed="0.109684"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.869482" elapsed="0.110417"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.868492" elapsed="0.111541"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.868048" elapsed="0.112104"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.981477" level="INFO">${next} = 18058</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.980504" elapsed="0.001035"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.983070" level="INFO">${current_port} = 18058</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:40.982144" elapsed="0.001071"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.863312" elapsed="0.120044"/>
</kw>
<msg time="2026-08-15T23:55:40.983446" level="INFO">Repeating keyword, round 229/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:40.986522" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:40.986367" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.986340" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.987054" level="INFO">${current_Date} = 2026-08-15 23:55:40.987</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:40.986835" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:40.987738" level="INFO">${ellapsed_seconds} = 2649.35</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:40.987303" elapsed="0.000472"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:40.988227" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:40.987897" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:40.987869" elapsed="0.000470"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:40.985837" elapsed="0.002566"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.989158" level="INFO">${number} = 229</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.988606" elapsed="0.000593"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.991232" level="INFO">${number} = 229</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.990739" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:40.994098" level="INFO">${device-port} = 18058</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:40.992947" elapsed="0.001262"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:40.998091" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.028498" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.028753" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:40.997599" elapsed="0.031277"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.029981" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:41.030150" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

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

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

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

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:40.996554" elapsed="0.034422"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.031841" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18058 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.096366" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.096578" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.031327" elapsed="0.065306"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.096744" elapsed="0.000111"/>
</return>
<msg time="2026-08-15T23:55:41.097215" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:40.995936" elapsed="0.101389"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.098028" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:40.994835" elapsed="0.104270"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:40.992297" elapsed="0.107101"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:40.991489" elapsed="0.108022"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.990063" elapsed="0.109573"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:40.989419" elapsed="0.110310"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.100913" level="INFO">${next} = 18059</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.100118" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.102233" level="INFO">${current_port} = 18059</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.101352" elapsed="0.000977"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:40.983908" elapsed="0.118549"/>
</kw>
<msg time="2026-08-15T23:55:41.102540" level="INFO">Repeating keyword, round 230/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.105167" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.104844" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.104770" elapsed="0.000545"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.106183" level="INFO">${current_Date} = 2026-08-15 23:55:41.106</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.105797" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.106730" level="INFO">${ellapsed_seconds} = 2649.231</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.106418" elapsed="0.000338"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.107093" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.106847" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.106825" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.104261" elapsed="0.002957"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.107739" level="INFO">${number} = 230</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.107364" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.109259" level="INFO">${number} = 230</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.108899" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.111253" level="INFO">${device-port} = 18059</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.110444" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.114089" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.148422" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.148695" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.113976" elapsed="0.034808"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.149782" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:55:41.149952" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.149030" elapsed="0.001029">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.148980" elapsed="0.001171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.113616" elapsed="0.036802">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.113187" elapsed="0.037445"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.151506" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18059 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.216833" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.217099" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.151017" elapsed="0.066148"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.217297" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:41.217790" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.112616" elapsed="0.105341"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.218616" elapsed="0.001033"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.111774" elapsed="0.108145"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.109984" elapsed="0.110174"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.109447" elapsed="0.110855"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.108438" elapsed="0.112022"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.107968" elapsed="0.112627"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.222083" level="INFO">${next} = 18060</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.221111" elapsed="0.001037"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.223739" level="INFO">${current_port} = 18060</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.222519" elapsed="0.001364"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.103009" elapsed="0.121010"/>
</kw>
<msg time="2026-08-15T23:55:41.224107" level="INFO">Repeating keyword, round 231/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.226764" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.226553" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.226525" elapsed="0.000351"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.227363" level="INFO">${current_Date} = 2026-08-15 23:55:41.227</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.227091" elapsed="0.000312"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.228075" level="INFO">${ellapsed_seconds} = 2649.11</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.227613" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.228593" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.228212" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.228186" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.226213" elapsed="0.002557"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.229588" level="INFO">${number} = 231</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.229065" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.231726" level="INFO">${number} = 231</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.231250" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.234677" level="INFO">${device-port} = 18060</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.233556" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.238252" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.268336" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.268566" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.238146" elapsed="0.030502"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.269660" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:41.269798" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.268863" elapsed="0.001209">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.268773" elapsed="0.001401">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.237737" elapsed="0.032717">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.237277" elapsed="0.033322"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.271481" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18060 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.340519" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.341117" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.270988" elapsed="0.070202"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.341436" elapsed="0.000204"/>
</return>
<msg time="2026-08-15T23:55:41.342408" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.236561" elapsed="0.106201"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.343422" elapsed="0.000951"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.235437" elapsed="0.109158"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.232830" elapsed="0.111961"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.232012" elapsed="0.112952"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.230600" elapsed="0.114502"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.229913" elapsed="0.115288"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.346353" level="INFO">${next} = 18061</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.345552" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.347671" level="INFO">${current_port} = 18061</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.346774" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.224682" elapsed="0.123280"/>
</kw>
<msg time="2026-08-15T23:55:41.348051" level="INFO">Repeating keyword, round 232/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.349967" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.349852" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.349831" elapsed="0.000201"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.350382" level="INFO">${current_Date} = 2026-08-15 23:55:41.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.350216" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.350891" level="INFO">${ellapsed_seconds} = 2648.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.350560" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.351317" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.350990" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.350971" elapsed="0.000432"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.349595" elapsed="0.001929"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.352386" level="INFO">${number} = 232</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.351752" elapsed="0.000666"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.354166" level="INFO">${number} = 232</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.353816" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.356150" level="INFO">${device-port} = 18061</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.355356" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.358701" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.392850" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.393102" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.358603" elapsed="0.034558"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.394083" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:41.394222" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.393332" elapsed="0.000999">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.393284" elapsed="0.001140">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.358326" elapsed="0.036376">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.357936" elapsed="0.037016"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.395795" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18061 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.464976" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.465246" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.395311" elapsed="0.070012"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.465476" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:41.466090" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.357503" elapsed="0.108742"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.466925" elapsed="0.000863"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.356672" elapsed="0.111348"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.354905" elapsed="0.113306"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.354354" elapsed="0.113959"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.353343" elapsed="0.115095"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.352652" elapsed="0.115883"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.469717" level="INFO">${next} = 18062</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.468957" elapsed="0.000820"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.471096" level="INFO">${current_port} = 18062</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.470192" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.348478" elapsed="0.122847"/>
</kw>
<msg time="2026-08-15T23:55:41.471411" level="INFO">Repeating keyword, round 233/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.473661" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.473549" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.473529" elapsed="0.000196"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.474058" level="INFO">${current_Date} = 2026-08-15 23:55:41.474</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.473894" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.474567" level="INFO">${ellapsed_seconds} = 2648.863</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.474253" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.474921" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.474664" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.474645" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.473196" elapsed="0.001850"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.475619" level="INFO">${number} = 233</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.475194" elapsed="0.000453"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.477274" level="INFO">${number} = 233</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.476867" elapsed="0.000444"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.479523" level="INFO">${device-port} = 18062</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.478610" elapsed="0.000998"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.482136" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.520236" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.520464" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.482035" elapsed="0.038488"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.521488" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:41.521623" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.520694" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.520645" elapsed="0.001306">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.481737" elapsed="0.040493">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.481351" elapsed="0.041019"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.523295" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18062 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.588892" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.589108" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.522717" elapsed="0.066457"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.589285" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:41.589738" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.480928" elapsed="0.108990"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.590485" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.480086" elapsed="0.111484"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.478102" elapsed="0.113655"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.477489" elapsed="0.114415"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.476312" elapsed="0.115721"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.475821" elapsed="0.116306"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.593408" level="INFO">${next} = 18063</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.592472" elapsed="0.001005"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.594926" level="INFO">${current_port} = 18063</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.593947" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.471883" elapsed="0.123278"/>
</kw>
<msg time="2026-08-15T23:55:41.595246" level="INFO">Repeating keyword, round 234/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.597593" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.597482" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.597462" elapsed="0.000195"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.598020" level="INFO">${current_Date} = 2026-08-15 23:55:41.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.597857" elapsed="0.000190"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.598514" level="INFO">${ellapsed_seconds} = 2648.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.598197" elapsed="0.000343"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.598869" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.598612" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.598593" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.597014" elapsed="0.001983"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.599514" level="INFO">${number} = 234</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.599145" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.600977" level="INFO">${number} = 234</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.600607" elapsed="0.000397"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.603006" level="INFO">${device-port} = 18063</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.602167" elapsed="0.000921"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.606066" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.644419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.644645" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.605761" elapsed="0.038943"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.645670" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:41.645834" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.644931" elapsed="0.001014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.644881" elapsed="0.001157">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.605443" elapsed="0.040892">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.604993" elapsed="0.041570"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.647432" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18063 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.712568" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.712857" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.646944" elapsed="0.065975"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.713039" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:55:41.713535" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.604494" elapsed="0.109171"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.714382" elapsed="0.000990"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.603576" elapsed="0.112003"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.601684" elapsed="0.114189"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.601162" elapsed="0.114828"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.600162" elapsed="0.115960"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.599696" elapsed="0.116528"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.717470" level="INFO">${next} = 18064</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.716577" elapsed="0.000955"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.718895" level="INFO">${current_port} = 18064</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.717946" elapsed="0.001098"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.595670" elapsed="0.123520"/>
</kw>
<msg time="2026-08-15T23:55:41.719280" level="INFO">Repeating keyword, round 235/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.721680" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.721566" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.721544" elapsed="0.000200"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.722070" level="INFO">${current_Date} = 2026-08-15 23:55:41.722</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.721907" elapsed="0.000190"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.722569" level="INFO">${ellapsed_seconds} = 2648.615</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.722247" elapsed="0.000348"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.722926" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.722667" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.722647" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.721306" elapsed="0.001749"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.723638" level="INFO">${number} = 235</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.723200" elapsed="0.000470"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.725378" level="INFO">${number} = 235</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.724855" elapsed="0.000614"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.728240" level="INFO">${device-port} = 18064</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.727038" elapsed="0.001290"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.731179" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.764656" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.764959" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.730872" elapsed="0.034151"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.766003" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:41.766146" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.765203" elapsed="0.001161">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.765153" elapsed="0.001333">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.730571" elapsed="0.036218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.730093" elapsed="0.036882"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.767873" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18064 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.836669" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.836956" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.767333" elapsed="0.069682"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.837132" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:41.837551" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.729652" elapsed="0.108013"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.838279" elapsed="0.000923"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.728832" elapsed="0.110610"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.726310" elapsed="0.113330"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.725632" elapsed="0.114112"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.724293" elapsed="0.115624"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.723844" elapsed="0.116172"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.841245" level="INFO">${next} = 18065</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.840368" elapsed="0.000948"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.842319" level="INFO">${current_port} = 18065</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.841661" elapsed="0.000724"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.719719" elapsed="0.122751"/>
</kw>
<msg time="2026-08-15T23:55:41.842526" level="INFO">Repeating keyword, round 236/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.844268" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.844101" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.844066" elapsed="0.000294"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.844958" level="INFO">${current_Date} = 2026-08-15 23:55:41.845</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.844661" elapsed="0.000337"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.845741" level="INFO">${ellapsed_seconds} = 2648.492</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.845240" elapsed="0.000541"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.846284" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.845910" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.845882" elapsed="0.000525"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.843642" elapsed="0.002831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.847244" level="INFO">${number} = 236</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.846683" elapsed="0.000599"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.849486" level="INFO">${number} = 236</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.848951" elapsed="0.000575"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.852653" level="INFO">${device-port} = 18065</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.851208" elapsed="0.001760"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.856513" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:41.888325" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.888555" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.856334" elapsed="0.032282"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.889599" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:41.889737" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:41.888855" elapsed="0.001025">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:41.888768" elapsed="0.001210">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.855790" elapsed="0.034499">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.855315" elapsed="0.035191"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.891412" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18065 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:41.960635" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:41.960994" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.890902" elapsed="0.070151"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:41.961189" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:55:41.961650" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.854727" elapsed="0.107033"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:41.962440" elapsed="0.001184"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.853739" elapsed="0.110136"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.850540" elapsed="0.113571"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.849751" elapsed="0.114466"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.848162" elapsed="0.116182"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.847502" elapsed="0.116941"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.965593" level="INFO">${next} = 18066</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.964906" elapsed="0.000726"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.966463" level="INFO">${current_port} = 18066</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:41.965905" elapsed="0.000620"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.842838" elapsed="0.123770"/>
</kw>
<msg time="2026-08-15T23:55:41.966664" level="INFO">Repeating keyword, round 237/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:41.968403" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:41.968243" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.968215" elapsed="0.000280"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.969000" level="INFO">${current_Date} = 2026-08-15 23:55:41.969</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:41.968723" elapsed="0.000316"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:41.969697" level="INFO">${ellapsed_seconds} = 2648.368</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:41.969250" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:41.970203" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:41.969855" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:41.969826" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:41.967897" elapsed="0.002479"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.971209" level="INFO">${number} = 237</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.970674" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.973268" level="INFO">${number} = 237</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.972765" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:41.976434" level="INFO">${device-port} = 18066</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:41.974970" elapsed="0.001586"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:41.979970" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.012909" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.013308" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:41.979854" elapsed="0.033528"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.014572" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:42.014717" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.013641" elapsed="0.001353">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.013570" elapsed="0.001532">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:41.979513" elapsed="0.035902">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:41.978797" elapsed="0.036770"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.016581" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18066 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.084446" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.084751" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.016043" elapsed="0.068813"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.084998" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:42.085500" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:41.978322" elapsed="0.107323"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.086279" elapsed="0.000949"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:41.977341" elapsed="0.110084"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:41.974303" elapsed="0.113312"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:41.973525" elapsed="0.114191"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.972106" elapsed="0.115779"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:41.971462" elapsed="0.116521"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.089226" level="INFO">${next} = 18067</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.088338" elapsed="0.000933"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.090083" level="INFO">${current_port} = 18067</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.089504" elapsed="0.000639"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:41.967023" elapsed="0.123202"/>
</kw>
<msg time="2026-08-15T23:55:42.090280" level="INFO">Repeating keyword, round 238/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.092003" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.091842" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.091792" elapsed="0.000300"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.092601" level="INFO">${current_Date} = 2026-08-15 23:55:42.092</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.092349" elapsed="0.000291"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.093333" level="INFO">${ellapsed_seconds} = 2648.245</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.092874" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.093838" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.093469" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.093443" elapsed="0.000509"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.091480" elapsed="0.002536"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.094738" level="INFO">${number} = 238</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.094220" elapsed="0.000556"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.096782" level="INFO">${number} = 238</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.096289" elapsed="0.000551"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.099563" level="INFO">${device-port} = 18067</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.098454" elapsed="0.001221"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.102986" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.136229" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.136458" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.102766" elapsed="0.033751"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.137538" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:55:42.137683" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.136731" elapsed="0.001061">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.136679" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.102483" elapsed="0.035771">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.101892" elapsed="0.036623"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.139463" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18067 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.204715" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.205007" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.138940" elapsed="0.066128"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.205202" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:42.205635" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.101441" elapsed="0.104310"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.206393" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.100317" elapsed="0.107224"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.097828" elapsed="0.109904"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.097062" elapsed="0.110823"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.095644" elapsed="0.112371"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.095015" elapsed="0.113097"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.209332" level="INFO">${next} = 18068</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.208477" elapsed="0.000915"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.210679" level="INFO">${current_port} = 18068</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.209753" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.090557" elapsed="0.120418"/>
</kw>
<msg time="2026-08-15T23:55:42.211064" level="INFO">Repeating keyword, round 239/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.213632" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.213470" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.213442" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.214173" level="INFO">${current_Date} = 2026-08-15 23:55:42.214</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.213947" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.214876" level="INFO">${ellapsed_seconds} = 2648.123</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.214424" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.215343" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.215015" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.214988" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.213053" elapsed="0.002464"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.216274" level="INFO">${number} = 239</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.215721" elapsed="0.000591"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.218315" level="INFO">${number} = 239</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.217828" elapsed="0.000525"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.221194" level="INFO">${device-port} = 18068</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.220022" elapsed="0.001285"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.227380" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.256394" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.256621" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.227279" elapsed="0.029399"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.257615" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:42.257747" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.256892" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.256840" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.226984" elapsed="0.031396">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.223686" elapsed="0.034838"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.259396" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18068 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.328479" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.328706" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.258912" elapsed="0.069850"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.328919" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:42.329341" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.223102" elapsed="0.106351"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.330066" elapsed="0.000989"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.221960" elapsed="0.109290"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.219324" elapsed="0.112207"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.218574" elapsed="0.113058"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.217193" elapsed="0.114561"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.216535" elapsed="0.115359"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.333104" level="INFO">${next} = 18069</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.332268" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.334505" level="INFO">${current_port} = 18069</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.333556" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.211505" elapsed="0.123355"/>
</kw>
<msg time="2026-08-15T23:55:42.334960" level="INFO">Repeating keyword, round 240/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.337474" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.337232" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.337190" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.338463" level="INFO">${current_Date} = 2026-08-15 23:55:42.338</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.338041" elapsed="0.000495"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.339627" level="INFO">${ellapsed_seconds} = 2647.999</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.338933" elapsed="0.000752"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.340434" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.339895" elapsed="0.000666"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.339843" elapsed="0.000772"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.336672" elapsed="0.004045"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.341934" level="INFO">${number} = 240</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.341079" elapsed="0.000915"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.344269" level="INFO">${number} = 240</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.343912" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.346356" level="INFO">${device-port} = 18069</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.345511" elapsed="0.000932"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.397595" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.410774" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.411085" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.397420" elapsed="0.013729"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.412189" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:42.412331" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.411357" elapsed="0.001087">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.411300" elapsed="0.001243">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.348511" elapsed="0.064359">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.348127" elapsed="0.064993"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.413999" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18069 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.480482" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.480704" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.413480" elapsed="0.067279"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.480917" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:42.481363" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.347702" elapsed="0.133771"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.482089" elapsed="0.000961"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.346919" elapsed="0.136339"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.345046" elapsed="0.138446"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.344463" elapsed="0.139152"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.343433" elapsed="0.140325"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.342394" elapsed="0.141537"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.485147" level="INFO">${next} = 18070</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.484292" elapsed="0.000917"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.486537" level="INFO">${current_port} = 18070</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.485580" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.335390" elapsed="0.151383"/>
</kw>
<msg time="2026-08-15T23:55:42.486929" level="INFO">Repeating keyword, round 241/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.489637" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.489373" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.489328" elapsed="0.000504"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.490526" level="INFO">${current_Date} = 2026-08-15 23:55:42.490</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.490165" elapsed="0.000420"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.491542" level="INFO">${ellapsed_seconds} = 2647.847</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.490945" elapsed="0.000623"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.491906" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.491638" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.491619" elapsed="0.000366"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.488725" elapsed="0.003305"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.492536" level="INFO">${number} = 241</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.492174" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.494190" level="INFO">${number} = 241</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.493782" elapsed="0.000436"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.496225" level="INFO">${device-port} = 18070</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.495427" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.499033" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.532296" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.532530" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.498933" elapsed="0.033658"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.533619" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:42.533764" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.532765" elapsed="0.001250">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.532715" elapsed="0.001427">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.498593" elapsed="0.035840">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.498196" elapsed="0.036386"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.535500" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18070 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.601102" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.601375" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.534985" elapsed="0.066448"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.601567" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:55:42.602126" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.497592" elapsed="0.104650"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.602891" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.496743" elapsed="0.107285"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.494965" elapsed="0.109260"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.494381" elapsed="0.109950"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.493261" elapsed="0.111200"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.492717" elapsed="0.111842"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.605838" level="INFO">${next} = 18071</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.604952" elapsed="0.000951"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.606879" level="INFO">${current_port} = 18071</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.606280" elapsed="0.000661"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.487425" elapsed="0.119598"/>
</kw>
<msg time="2026-08-15T23:55:42.607077" level="INFO">Repeating keyword, round 242/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.608697" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.608541" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.608513" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.609312" level="INFO">${current_Date} = 2026-08-15 23:55:42.609</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.609074" elapsed="0.000303"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.610079" level="INFO">${ellapsed_seconds} = 2647.728</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.609588" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.610559" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.610216" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.610190" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.608204" elapsed="0.002549"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.611493" level="INFO">${number} = 242</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.610981" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.613538" level="INFO">${number} = 242</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.613036" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.616356" level="INFO">${device-port} = 18071</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.615234" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.619738" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.656728" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.657011" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.619638" elapsed="0.037436"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.658044" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:42.658186" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.657252" elapsed="0.001045">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.657201" elapsed="0.001188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.619359" elapsed="0.039338">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.618930" elapsed="0.040052"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.659901" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18071 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.724678" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.724967" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.659349" elapsed="0.065681"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.725149" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:42.725577" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.618312" elapsed="0.107380"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.726333" elapsed="0.000941"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.617142" elapsed="0.110333"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.614570" elapsed="0.113170"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.613830" elapsed="0.114093"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.612396" elapsed="0.115666"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.611747" elapsed="0.116417"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.729412" level="INFO">${next} = 18072</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.728514" elapsed="0.000959"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.730874" level="INFO">${current_port} = 18072</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.729912" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.607369" elapsed="0.123764"/>
</kw>
<msg time="2026-08-15T23:55:42.731224" level="INFO">Repeating keyword, round 243/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.733889" elapsed="0.000133"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.733605" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.733563" elapsed="0.000597"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.734895" level="INFO">${current_Date} = 2026-08-15 23:55:42.735</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.734498" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.736157" level="INFO">${ellapsed_seconds} = 2647.602</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.735369" elapsed="0.000859"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.736716" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.736367" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.736333" elapsed="0.000519"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.733061" elapsed="0.003858"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.737659" level="INFO">${number} = 243</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.737139" elapsed="0.000558"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.739782" level="INFO">${number} = 243</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.739291" elapsed="0.000563"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.742026" level="INFO">${device-port} = 18072</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.741202" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.744872" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.776480" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.776709" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.744748" elapsed="0.032021"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.777756" elapsed="0.000108"/>
</kw>
<msg time="2026-08-15T23:55:42.777947" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.776984" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.776934" elapsed="0.001307">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.744470" elapsed="0.034074">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.744054" elapsed="0.034642"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.779589" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18072 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.844526" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.844781" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.779084" elapsed="0.065800"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.845013" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:55:42.845474" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.743601" elapsed="0.101986"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.846273" elapsed="0.000963"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.742558" elapsed="0.104878"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.740714" elapsed="0.106915"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.740080" elapsed="0.107651"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.738583" elapsed="0.109329"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.737938" elapsed="0.110074"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.849232" level="INFO">${next} = 18073</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.848388" elapsed="0.000919"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.850571" level="INFO">${current_port} = 18073</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.849686" elapsed="0.000945"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.731681" elapsed="0.119034"/>
</kw>
<msg time="2026-08-15T23:55:42.850844" level="INFO">Repeating keyword, round 244/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.852664" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.852480" elapsed="0.000244"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.852447" elapsed="0.000308"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.853316" level="INFO">${current_Date} = 2026-08-15 23:55:42.853</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.853064" elapsed="0.000291"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.854083" level="INFO">${ellapsed_seconds} = 2647.484</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.853571" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.854593" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.854227" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.854200" elapsed="0.000513"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.852062" elapsed="0.002720"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.855570" level="INFO">${number} = 244</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.855030" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.857633" level="INFO">${number} = 244</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.857132" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.860484" level="INFO">${device-port} = 18073</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.859333" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.863870" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:42.896571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.896856" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.863747" elapsed="0.033176"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.897857" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:42.898001" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:42.897092" elapsed="0.001017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:42.897045" elapsed="0.001158">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.863475" elapsed="0.035008">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.863082" elapsed="0.035621"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.899631" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18073 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:42.968872" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:42.969095" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.899112" elapsed="0.070039"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:42.969267" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:42.969681" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.862643" elapsed="0.107149"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:42.970406" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.861279" elapsed="0.110210"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.858667" elapsed="0.113011"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.857928" elapsed="0.113852"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.856486" elapsed="0.115517"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.855854" elapsed="0.116253"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.972924" level="INFO">${next} = 18074</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.972416" elapsed="0.000546"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.973726" level="INFO">${current_port} = 18074</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:42.973191" elapsed="0.000593"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.851147" elapsed="0.122752"/>
</kw>
<msg time="2026-08-15T23:55:42.973954" level="INFO">Repeating keyword, round 245/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:42.975570" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:42.975417" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.975388" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.976146" level="INFO">${current_Date} = 2026-08-15 23:55:42.976</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:42.975920" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:42.976876" level="INFO">${ellapsed_seconds} = 2647.361</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:42.976395" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:42.977353" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:42.977017" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:42.976989" elapsed="0.000475"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:42.975080" elapsed="0.002448"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.978275" level="INFO">${number} = 245</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.977731" elapsed="0.000587"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.980388" level="INFO">${number} = 245</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.979909" elapsed="0.000517"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:42.983315" level="INFO">${device-port} = 18074</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:42.982144" elapsed="0.001367"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:42.986537" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.020291" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.020520" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:42.986423" elapsed="0.034157"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.021537" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:55:43.021709" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.020755" elapsed="0.001205">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.020704" elapsed="0.001363">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:42.986146" elapsed="0.036205">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:42.985721" elapsed="0.036775"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.023427" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18074 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.096846" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.097237" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.022903" elapsed="0.074396"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.097472" elapsed="0.000122"/>
</return>
<msg time="2026-08-15T23:55:43.098079" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:42.985301" elapsed="0.112895"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.098901" elapsed="0.001123"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:42.984210" elapsed="0.116022"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:42.981458" elapsed="0.118991"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:42.980687" elapsed="0.119869"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.979221" elapsed="0.121468"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:42.978539" elapsed="0.122322"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.102400" level="INFO">${next} = 18075</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.101314" elapsed="0.001170"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.104110" level="INFO">${current_port} = 18075</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.102999" elapsed="0.001227"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:42.974221" elapsed="0.130202"/>
</kw>
<msg time="2026-08-15T23:55:43.104561" level="INFO">Repeating keyword, round 246/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.107008" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.106881" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.106855" elapsed="0.000221"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.107501" level="INFO">${current_Date} = 2026-08-15 23:55:43.107</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.107301" elapsed="0.000228"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.108122" level="INFO">${ellapsed_seconds} = 2647.23</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.107705" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.108532" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.108231" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.108206" elapsed="0.000411"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.106601" elapsed="0.002063"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.109233" level="INFO">${number} = 246</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.108829" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.110863" level="INFO">${number} = 246</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.110479" elapsed="0.000412"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.112974" level="INFO">${device-port} = 18075</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.112140" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.115976" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.148469" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.148729" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.115870" elapsed="0.032926"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.149783" elapsed="0.000096"/>
</kw>
<msg time="2026-08-15T23:55:43.149965" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.149023" elapsed="0.001054">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.148972" elapsed="0.001201">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.115565" elapsed="0.034900">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.115159" elapsed="0.035546"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.151915" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18075 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.217378" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.217634" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.151108" elapsed="0.066584"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.217864" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:55:43.218324" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.114655" elapsed="0.103783"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.219082" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.113539" elapsed="0.106706"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.111605" elapsed="0.108864"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.111056" elapsed="0.109519"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.109932" elapsed="0.110780"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.109434" elapsed="0.111448"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.222083" level="INFO">${next} = 18076</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.221243" elapsed="0.000900"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.223449" level="INFO">${current_port} = 18076</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.222517" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.105125" elapsed="0.118549"/>
</kw>
<msg time="2026-08-15T23:55:43.223762" level="INFO">Repeating keyword, round 247/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.226644" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.226377" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.226329" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.227531" level="INFO">${current_Date} = 2026-08-15 23:55:43.227</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.227166" elapsed="0.000425"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.228588" level="INFO">${ellapsed_seconds} = 2647.11</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.227959" elapsed="0.000656"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.228967" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.228686" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.228667" elapsed="0.000381"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.225755" elapsed="0.003339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.229611" level="INFO">${number} = 247</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.229242" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.231110" level="INFO">${number} = 247</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.230746" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.233184" level="INFO">${device-port} = 18076</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.232351" elapsed="0.000919"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.236135" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.268472" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.268715" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.236032" elapsed="0.032745"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.269889" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:55:43.270041" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.269020" elapsed="0.001264">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.268968" elapsed="0.001429">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.235686" elapsed="0.035006">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.235262" elapsed="0.035622"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.271729" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18076 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.340459" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.340678" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.271241" elapsed="0.069492"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.340889" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:43.341298" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.234837" elapsed="0.106570"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.342014" elapsed="0.000885"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.233721" elapsed="0.109369"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.231870" elapsed="0.111439"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.231298" elapsed="0.112113"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.230292" elapsed="0.113244"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.229832" elapsed="0.113799"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.344784" level="INFO">${next} = 18077</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.344035" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.346151" level="INFO">${current_port} = 18077</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.345255" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.224287" elapsed="0.122092"/>
</kw>
<msg time="2026-08-15T23:55:43.346465" level="INFO">Repeating keyword, round 248/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.349148" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.348854" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.348763" elapsed="0.000539"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.350101" level="INFO">${current_Date} = 2026-08-15 23:55:43.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.349705" elapsed="0.000455"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.351263" level="INFO">${ellapsed_seconds} = 2646.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.350492" elapsed="0.000841"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.351701" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.351460" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.351438" elapsed="0.000343"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.348240" elapsed="0.003605"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.352359" level="INFO">${number} = 248</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.351994" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.353841" level="INFO">${number} = 248</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.353477" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.355869" level="INFO">${device-port} = 18077</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.355071" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.358753" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.392507" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.392638" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.358643" elapsed="0.034023"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.393199" elapsed="0.000032"/>
</kw>
<msg time="2026-08-15T23:55:43.393280" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.392759" elapsed="0.000616">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.392732" elapsed="0.000758">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.358340" elapsed="0.035445">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.357920" elapsed="0.036162"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.395063" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18077 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.464599" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.464888" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.394511" elapsed="0.070454"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.465086" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:43.465530" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.357453" elapsed="0.108188"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.466325" elapsed="0.000984"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.356393" elapsed="0.111114"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.354557" elapsed="0.113145"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.354030" elapsed="0.113827"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.353005" elapsed="0.115014"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.352541" elapsed="0.115582"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.469378" level="INFO">${next} = 18078</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.468512" elapsed="0.000926"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.471100" level="INFO">${current_port} = 18078</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.469979" elapsed="0.001230"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.346948" elapsed="0.124396"/>
</kw>
<msg time="2026-08-15T23:55:43.471433" level="INFO">Repeating keyword, round 249/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.474221" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.473958" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.473909" elapsed="0.000480"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.474738" level="INFO">${current_Date} = 2026-08-15 23:55:43.475</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.474567" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.475269" level="INFO">${ellapsed_seconds} = 2646.862</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.474930" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.475619" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.475367" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.475347" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.473218" elapsed="0.002526"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.476273" level="INFO">${number} = 249</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.475905" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.477743" level="INFO">${number} = 249</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.477381" elapsed="0.000405"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.479984" level="INFO">${device-port} = 18078</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.479112" elapsed="0.000957"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.482962" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.520422" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.520649" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.482855" elapsed="0.037854"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.521634" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:43.521768" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.520919" elapsed="0.001075">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.520870" elapsed="0.001227">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.482544" elapsed="0.039833">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.482139" elapsed="0.040383"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.523453" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18078 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.588493" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.588713" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.522902" elapsed="0.065883"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.589008" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:43.589496" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.481667" elapsed="0.107959"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.590279" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.480561" elapsed="0.110844"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.478556" elapsed="0.113046"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.477964" elapsed="0.113742"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.476930" elapsed="0.114948"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.476463" elapsed="0.115515"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.593198" level="INFO">${next} = 18079</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.592324" elapsed="0.000937"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.594568" level="INFO">${current_port} = 18079</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.593643" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.471908" elapsed="0.122953"/>
</kw>
<msg time="2026-08-15T23:55:43.594955" level="INFO">Repeating keyword, round 250/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.597519" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.597390" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.597340" elapsed="0.000244"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.597942" level="INFO">${current_Date} = 2026-08-15 23:55:43.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.597765" elapsed="0.000204"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.598426" level="INFO">${ellapsed_seconds} = 2646.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.598119" elapsed="0.000334"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.598763" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.598525" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.598507" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.596753" elapsed="0.002154"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.599444" level="INFO">${number} = 250</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.599057" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.601032" level="INFO">${number} = 250</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.600638" elapsed="0.000422"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.603075" level="INFO">${device-port} = 18079</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.602260" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.606063" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.640391" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.640842" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.605957" elapsed="0.034953"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.642139" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:43.642290" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.641188" elapsed="0.001217">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.641113" elapsed="0.001393">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.605658" elapsed="0.037256">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.605238" elapsed="0.037961"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.644172" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18079 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.712685" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.713001" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.643600" elapsed="0.069479"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.713215" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:43.713706" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.604752" elapsed="0.109122"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.714489" elapsed="0.001027"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.603640" elapsed="0.112201"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.601775" elapsed="0.114329"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.601223" elapsed="0.114997"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.600150" elapsed="0.116208"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.599656" elapsed="0.116810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.717886" level="INFO">${next} = 18080</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.716869" elapsed="0.001083"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.719302" level="INFO">${current_port} = 18080</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.718337" elapsed="0.001111"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.595382" elapsed="0.124282"/>
</kw>
<msg time="2026-08-15T23:55:43.719835" level="INFO">Repeating keyword, round 251/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.721894" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.721699" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.721666" elapsed="0.000335"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.722503" level="INFO">${current_Date} = 2026-08-15 23:55:43.722</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.722242" elapsed="0.000300"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.723368" level="INFO">${ellapsed_seconds} = 2646.615</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.722771" elapsed="0.000637"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.723908" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.723511" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.723483" elapsed="0.000543"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.721325" elapsed="0.002767"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.724865" level="INFO">${number} = 251</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.724301" elapsed="0.000605"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.726992" level="INFO">${number} = 251</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.726476" elapsed="0.000555"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.730115" level="INFO">${device-port} = 18080</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.728736" elapsed="0.001500"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.733620" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.764834" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.765107" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.733516" elapsed="0.031658"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.766199" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:43.766338" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.765367" elapsed="0.001201">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.765314" elapsed="0.001358">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.733229" elapsed="0.033788">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.732732" elapsed="0.034440"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.768055" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18080 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.833070" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.833290" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.767527" elapsed="0.065818"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.833458" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:43.833938" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.732302" elapsed="0.101754"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.834642" elapsed="0.000905"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.731070" elapsed="0.104672"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.728089" elapsed="0.108013"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.727280" elapsed="0.108935"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.725837" elapsed="0.110509"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.725161" elapsed="0.111282"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.837630" level="INFO">${next} = 18081</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.836791" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.839073" level="INFO">${current_port} = 18081</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.838091" elapsed="0.001082"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.720356" elapsed="0.118952"/>
</kw>
<msg time="2026-08-15T23:55:43.839394" level="INFO">Repeating keyword, round 252/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.842070" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.841781" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.841733" elapsed="0.000487"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.843259" level="INFO">${current_Date} = 2026-08-15 23:55:43.843</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.842837" elapsed="0.000493"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.843882" level="INFO">${ellapsed_seconds} = 2646.494</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.843513" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.844267" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.843984" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.843964" elapsed="0.000389"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.841237" elapsed="0.003164"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.844948" level="INFO">${number} = 252</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.844551" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.846458" level="INFO">${number} = 252</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.846105" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.848474" level="INFO">${device-port} = 18081</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.847664" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.853078" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:43.884318" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.884560" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.852967" elapsed="0.031653"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.885545" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:43.885679" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:43.884787" elapsed="0.001004">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:43.884739" elapsed="0.001180">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.852587" elapsed="0.033624">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.852190" elapsed="0.034237"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.887301" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18081 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:43.952743" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:43.952993" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.886781" elapsed="0.066268"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:43.953164" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:43.953599" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.851743" elapsed="0.101971"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:43.954342" elapsed="0.000884"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.849017" elapsed="0.106401"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.847212" elapsed="0.108397"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.846646" elapsed="0.109065"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.845619" elapsed="0.110262"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.845154" elapsed="0.110830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.957113" level="INFO">${next} = 18082</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.956331" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.958470" level="INFO">${current_port} = 18082</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:43.957548" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.839921" elapsed="0.118771"/>
</kw>
<msg time="2026-08-15T23:55:43.958779" level="INFO">Repeating keyword, round 253/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:43.961541" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:43.961287" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.961200" elapsed="0.000488"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.962410" level="INFO">${current_Date} = 2026-08-15 23:55:43.962</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:43.962059" elapsed="0.000384"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:43.962963" level="INFO">${ellapsed_seconds} = 2646.375</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:43.962600" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:43.963333" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:43.963081" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:43.963058" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:43.960528" elapsed="0.002932"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.963995" level="INFO">${number} = 253</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.963607" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.965477" level="INFO">${number} = 253</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.965126" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:43.967483" level="INFO">${device-port} = 18082</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:43.966671" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:43.970275" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.004519" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.004882" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:43.970177" elapsed="0.034795"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.006241" elapsed="0.000079"/>
</kw>
<msg time="2026-08-15T23:55:44.006433" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.005216" elapsed="0.001497">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.005140" elapsed="0.001767">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:43.969900" elapsed="0.037428">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:43.969468" elapsed="0.038050"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.008527" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18082 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.072922" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.073289" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.008077" elapsed="0.065271"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.073513" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:55:44.074068" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:43.968819" elapsed="0.105364"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.074885" elapsed="0.001017"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:43.968022" elapsed="0.108079"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:43.966222" elapsed="0.110075"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:43.965664" elapsed="0.110792"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.964627" elapsed="0.111968"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:43.964179" elapsed="0.112516"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.077693" level="INFO">${next} = 18083</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.077106" elapsed="0.000627"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.078625" level="INFO">${current_port} = 18083</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.078018" elapsed="0.000669"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:43.959270" elapsed="0.119507"/>
</kw>
<msg time="2026-08-15T23:55:44.078866" level="INFO">Repeating keyword, round 254/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.080719" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.080545" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.080511" elapsed="0.000345"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.081414" level="INFO">${current_Date} = 2026-08-15 23:55:44.081</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.081159" elapsed="0.000294"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.082200" level="INFO">${ellapsed_seconds} = 2646.256</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.081680" elapsed="0.000559"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.082723" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.082346" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.082319" elapsed="0.000545"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.080166" elapsed="0.002766"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.083695" level="INFO">${number} = 254</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.083152" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.085895" level="INFO">${number} = 254</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.085362" elapsed="0.000574"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.088683" level="INFO">${device-port} = 18083</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.087667" elapsed="0.001097"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.091566" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.124433" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.124723" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.091457" elapsed="0.033326"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.125862" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:44.126005" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.125029" elapsed="0.001089">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.124967" elapsed="0.001247">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.091177" elapsed="0.035366">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.090749" elapsed="0.036072"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.127722" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18083 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.197146" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.197479" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.127209" elapsed="0.070328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.197692" elapsed="0.000146"/>
</return>
<msg time="2026-08-15T23:55:44.198246" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.090059" elapsed="0.108293"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.199026" elapsed="0.001177"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.089239" elapsed="0.111155"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.086998" elapsed="0.113589"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.086175" elapsed="0.114516"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.084671" elapsed="0.116185"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.083988" elapsed="0.116973"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.202154" level="INFO">${next} = 18084</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.201333" elapsed="0.000880"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.203514" level="INFO">${current_port} = 18084</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.202580" elapsed="0.001029"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.079219" elapsed="0.124520"/>
</kw>
<msg time="2026-08-15T23:55:44.203897" level="INFO">Repeating keyword, round 255/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.206525" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.206277" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.206231" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.207438" level="INFO">${current_Date} = 2026-08-15 23:55:44.207</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.207031" elapsed="0.000467"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.208445" level="INFO">${ellapsed_seconds} = 2646.13</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.207879" elapsed="0.000592"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.208821" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.208542" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.208522" elapsed="0.000380"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.205707" elapsed="0.003241"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.209461" level="INFO">${number} = 255</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.209095" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.210931" level="INFO">${number} = 255</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.210562" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.212984" level="INFO">${device-port} = 18084</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.212173" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.215929" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.248134" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.248277" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.215823" elapsed="0.032513"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.249276" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:44.249410" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.248506" elapsed="0.001120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.248458" elapsed="0.001269">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.215515" elapsed="0.034560">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.214851" elapsed="0.035372"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.251122" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18084 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.316260" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.316478" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.250599" elapsed="0.065934"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.316648" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:44.317107" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.214416" elapsed="0.102817"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.317894" elapsed="0.000880"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.213513" elapsed="0.105495"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.211685" elapsed="0.107540"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.211119" elapsed="0.108222"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.210111" elapsed="0.109362"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.209643" elapsed="0.109930"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.320746" level="INFO">${next} = 18085</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.319980" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.322134" level="INFO">${current_port} = 18085</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.321225" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.204377" elapsed="0.117991"/>
</kw>
<msg time="2026-08-15T23:55:44.322457" level="INFO">Repeating keyword, round 256/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.325033" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.324760" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.324719" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.325963" level="INFO">${current_Date} = 2026-08-15 23:55:44.326</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.325579" elapsed="0.000442"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.327124" level="INFO">${ellapsed_seconds} = 2646.011</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.326354" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.327532" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.327284" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.327265" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.324238" elapsed="0.003421"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.328214" level="INFO">${number} = 256</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.327842" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.329655" level="INFO">${number} = 256</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.329311" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.331715" level="INFO">${device-port} = 18085</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.330869" elapsed="0.000942"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.334465" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.364490" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.364710" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.334366" elapsed="0.030403"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.365686" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:44.365861" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.364973" elapsed="0.000995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.364927" elapsed="0.001132">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.334083" elapsed="0.032249">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.333466" elapsed="0.033073"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.367421" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18085 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.432066" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.432280" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.366921" elapsed="0.065414"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.432447" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:44.432894" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.333056" elapsed="0.099953"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.433573" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.332254" elapsed="0.102395"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.330384" elapsed="0.104498"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.329855" elapsed="0.105148"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.328863" elapsed="0.106266"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.328397" elapsed="0.106831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.436369" level="INFO">${next} = 18086</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.435575" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.437684" level="INFO">${current_port} = 18086</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.436787" elapsed="0.000993"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.322939" elapsed="0.115038"/>
</kw>
<msg time="2026-08-15T23:55:44.438066" level="INFO">Repeating keyword, round 257/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.440445" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.440334" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.440313" elapsed="0.000198"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.440828" level="INFO">${current_Date} = 2026-08-15 23:55:44.441</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.440656" elapsed="0.000200"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.441353" level="INFO">${ellapsed_seconds} = 2645.896</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.441006" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.441691" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.441453" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.441434" elapsed="0.000337"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.439761" elapsed="0.002074"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.442355" level="INFO">${number} = 257</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.441985" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.443856" level="INFO">${number} = 257</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.443495" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.445849" level="INFO">${device-port} = 18086</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.445042" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.448639" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.479953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.480175" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.448537" elapsed="0.031698"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.481152" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:44.481309" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.480402" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.480357" elapsed="0.001241">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.448220" elapsed="0.033700">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.447606" elapsed="0.034462"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.482935" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18086 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.548222" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.548433" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.482418" elapsed="0.066070"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.548599" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:44.549037" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.447197" elapsed="0.101952"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.549707" elapsed="0.000885"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.446369" elapsed="0.104488"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.444565" elapsed="0.106488"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.444045" elapsed="0.107109"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.443034" elapsed="0.108244"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.442537" elapsed="0.108836"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.552511" level="INFO">${next} = 18087</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.551718" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.553946" level="INFO">${current_port} = 18087</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.552986" elapsed="0.001060"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.438486" elapsed="0.115689"/>
</kw>
<msg time="2026-08-15T23:55:44.554263" level="INFO">Repeating keyword, round 258/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.556838" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.556560" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.556518" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.557735" level="INFO">${current_Date} = 2026-08-15 23:55:44.558</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.557388" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.558946" level="INFO">${ellapsed_seconds} = 2645.779</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.558165" elapsed="0.000842"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.559528" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.559166" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.559125" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.556029" elapsed="0.003625"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.560185" level="INFO">${number} = 258</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.559816" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.561619" level="INFO">${number} = 258</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.561277" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.563627" level="INFO">${device-port} = 18087</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.562839" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.566396" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.595949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.596173" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.566298" elapsed="0.029934"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.597155" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:44.597294" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.596397" elapsed="0.001003">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.596351" elapsed="0.001147">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.566009" elapsed="0.031760">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.565401" elapsed="0.032621"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.598896" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18087 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.664497" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.664728" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.598375" elapsed="0.066411"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.664946" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:55:44.665367" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.564977" elapsed="0.100501"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.666093" elapsed="0.000947"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.564167" elapsed="0.103067"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.562354" elapsed="0.105070"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.561820" elapsed="0.105705"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.560826" elapsed="0.106821"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.560366" elapsed="0.107377"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.668955" level="INFO">${next} = 18088</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.668139" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.670298" level="INFO">${current_port} = 18088</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.669378" elapsed="0.001019"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.554708" elapsed="0.115820"/>
</kw>
<msg time="2026-08-15T23:55:44.670617" level="INFO">Repeating keyword, round 259/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.673207" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.672961" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.672916" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.674052" level="INFO">${current_Date} = 2026-08-15 23:55:44.674</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.673674" elapsed="0.000486"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.675228" level="INFO">${ellapsed_seconds} = 2645.663</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.674506" elapsed="0.000789"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.675672" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.675422" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.675398" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.672388" elapsed="0.003409"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.676328" level="INFO">${number} = 259</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.675962" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.677759" level="INFO">${number} = 259</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.677420" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.679759" level="INFO">${device-port} = 18088</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.678977" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.682540" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.712873" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.713101" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.682442" elapsed="0.030719"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.714074" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:44.714212" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.713330" elapsed="0.001068">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.713281" elapsed="0.001217">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.682163" elapsed="0.032610">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.681526" elapsed="0.033425"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.715794" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18088 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.784487" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.784709" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.715308" elapsed="0.069456"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.784922" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:44.785327" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.681116" elapsed="0.104322"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.786060" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.680303" elapsed="0.106829"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.678498" elapsed="0.108822"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.677961" elapsed="0.109459"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.676974" elapsed="0.110569"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.676511" elapsed="0.111125"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.788774" level="INFO">${next} = 18089</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.788027" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.790155" level="INFO">${current_port} = 18089</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.789244" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.671115" elapsed="0.119266"/>
</kw>
<msg time="2026-08-15T23:55:44.790466" level="INFO">Repeating keyword, round 260/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.793012" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.792736" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.792693" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.793991" level="INFO">${current_Date} = 2026-08-15 23:55:44.794</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.793555" elapsed="0.000497"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.794720" level="INFO">${ellapsed_seconds} = 2645.543</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.794393" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.795087" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.794850" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.794822" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.792207" elapsed="0.003004"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.795724" level="INFO">${number} = 260</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.795358" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.797173" level="INFO">${number} = 260</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.796831" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.799208" level="INFO">${device-port} = 18089</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.798413" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.801979" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.866629" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.866899" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.801880" elapsed="0.065080"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.867920" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:44.868058" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.867153" elapsed="0.001012">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.867103" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.801566" elapsed="0.066965">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.800955" elapsed="0.067791"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.869639" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18089 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:44.936682" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.936940" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.869132" elapsed="0.067866"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:44.937115" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:44.937560" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.800529" elapsed="0.137144"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:44.938315" elapsed="0.000947"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.799727" elapsed="0.139758"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.797924" elapsed="0.141777"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.797360" elapsed="0.142508"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.796371" elapsed="0.143640"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.795923" elapsed="0.144193"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.941392" level="INFO">${next} = 18090</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.940523" elapsed="0.000931"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.942774" level="INFO">${current_port} = 18090</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:44.941870" elapsed="0.001071"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.790942" elapsed="0.152132"/>
</kw>
<msg time="2026-08-15T23:55:44.943162" level="INFO">Repeating keyword, round 261/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:44.945726" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:44.945510" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.945482" elapsed="0.000361"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.946271" level="INFO">${current_Date} = 2026-08-15 23:55:44.946</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:44.946052" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:44.946977" level="INFO">${ellapsed_seconds} = 2645.391</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:44.946521" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.947443" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:44.947114" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:44.947086" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:44.945106" elapsed="0.002510"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.948364" level="INFO">${number} = 261</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.947840" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.950389" level="INFO">${number} = 261</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.949915" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:44.953207" level="INFO">${device-port} = 18090</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:44.952092" elapsed="0.001228"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.957187" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:44.988672" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:44.988856" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.957046" elapsed="0.031850"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:44.989486" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:55:44.989570" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:44.989012" elapsed="0.000689">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:44.988978" elapsed="0.000786">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:44.956518" elapsed="0.033452">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:44.955650" elapsed="0.034411"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:44.990625" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18090 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.060564" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.060698" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:44.990292" elapsed="0.070439"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.060826" elapsed="0.000049"/>
</return>
<msg time="2026-08-15T23:55:45.061086" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:44.955077" elapsed="0.106080"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.061517" elapsed="0.000590"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:44.953959" elapsed="0.108268"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:44.951395" elapsed="0.110959"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:44.950648" elapsed="0.111770"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.949268" elapsed="0.113229"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:44.948619" elapsed="0.113936"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.063275" level="INFO">${next} = 18091</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.062773" elapsed="0.000540"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.064115" level="INFO">${current_port} = 18091</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.063541" elapsed="0.000634"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:44.943618" elapsed="0.120639"/>
</kw>
<msg time="2026-08-15T23:55:45.064311" level="INFO">Repeating keyword, round 262/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.065913" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.065731" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.065704" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.066481" level="INFO">${current_Date} = 2026-08-15 23:55:45.066</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.066257" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.067196" level="INFO">${ellapsed_seconds} = 2645.271</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.066727" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.067694" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.067332" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.067306" elapsed="0.000537"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.065397" elapsed="0.002512"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.068528" level="INFO">${number} = 262</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.068117" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.069983" level="INFO">${number} = 262</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.069624" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.072002" level="INFO">${device-port} = 18091</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.071173" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.074742" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.116649" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.116927" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.074644" elapsed="0.042347"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.117988" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:45.118142" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.117186" elapsed="0.001076">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.117124" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.074369" elapsed="0.044270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.073762" elapsed="0.045153"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.119853" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18091 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.184521" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.184757" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.119313" elapsed="0.065550"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.184989" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:45.185432" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.073351" elapsed="0.112195"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.186206" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.072536" elapsed="0.114830"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.070698" elapsed="0.116863"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.070169" elapsed="0.117526"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.069178" elapsed="0.118710"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.068710" elapsed="0.119302"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.189226" level="INFO">${next} = 18092</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.188371" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.190617" level="INFO">${current_port} = 18092</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.189661" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.064577" elapsed="0.126335"/>
</kw>
<msg time="2026-08-15T23:55:45.191021" level="INFO">Repeating keyword, round 263/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.193748" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.193498" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.193453" elapsed="0.000538"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.194712" level="INFO">${current_Date} = 2026-08-15 23:55:45.195</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.194344" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.195979" level="INFO">${ellapsed_seconds} = 2645.142</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.195162" elapsed="0.000877"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.196760" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.196217" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.196171" elapsed="0.000728"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.192905" elapsed="0.004040"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.197481" level="INFO">${number} = 263</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.197091" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.198967" level="INFO">${number} = 263</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.198603" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.201017" level="INFO">${device-port} = 18092</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.200209" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.203853" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.236535" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.236756" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.203721" elapsed="0.033133"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.237755" elapsed="0.000091"/>
</kw>
<msg time="2026-08-15T23:55:45.237931" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.237026" elapsed="0.001122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.236980" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.203441" elapsed="0.035115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.202786" elapsed="0.035921"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.239620" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18092 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.304605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.304869" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.239096" elapsed="0.065837"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.305047" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:45.305449" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.202371" elapsed="0.103188"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.306201" elapsed="0.000999"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.201554" elapsed="0.105849"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.199719" elapsed="0.107874"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.199155" elapsed="0.108538"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.198139" elapsed="0.109827"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.197665" elapsed="0.110511"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.309486" level="INFO">${next} = 18093</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.308565" elapsed="0.000983"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.310932" level="INFO">${current_port} = 18093</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.309979" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.191482" elapsed="0.119689"/>
</kw>
<msg time="2026-08-15T23:55:45.311261" level="INFO">Repeating keyword, round 264/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.314053" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.313732" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.313683" elapsed="0.000538"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.315090" level="INFO">${current_Date} = 2026-08-15 23:55:45.315</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.314692" elapsed="0.000473"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.316306" level="INFO">${ellapsed_seconds} = 2645.022</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.315523" elapsed="0.000811"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.316643" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.316405" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.316387" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.313101" elapsed="0.003668"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.317303" level="INFO">${number} = 264</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.316932" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.318753" level="INFO">${number} = 264</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.318408" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.320863" level="INFO">${device-port} = 18093</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.320040" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.325546" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.356901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.357128" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.325447" elapsed="0.031741"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.358196" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:45.358344" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.357355" elapsed="0.001098">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.357308" elapsed="0.001239">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.325167" elapsed="0.033725">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.322646" elapsed="0.036575"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.360152" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18093 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.428691" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.428986" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.359592" elapsed="0.069452"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.429172" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:55:45.429637" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.322221" elapsed="0.107544"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.430428" elapsed="0.000976"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.321395" elapsed="0.110204"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.319539" elapsed="0.112352"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.318971" elapsed="0.113038"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.317953" elapsed="0.114188"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.317486" elapsed="0.114757"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.433450" level="INFO">${next} = 18094</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.432598" elapsed="0.000912"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.434885" level="INFO">${current_port} = 18094</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.433936" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.311712" elapsed="0.123415"/>
</kw>
<msg time="2026-08-15T23:55:45.435214" level="INFO">Repeating keyword, round 265/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.437917" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.437621" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.437578" elapsed="0.000498"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.438767" level="INFO">${current_Date} = 2026-08-15 23:55:45.439</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.438407" elapsed="0.000455"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.440055" level="INFO">${ellapsed_seconds} = 2644.898</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.439219" elapsed="0.000898"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.440675" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.440286" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.440235" elapsed="0.000550"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.437074" elapsed="0.003802"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.441609" level="INFO">${number} = 265</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.441093" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.443747" level="INFO">${number} = 265</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.443220" elapsed="0.000593"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.445957" level="INFO">${device-port} = 18094</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.445149" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.448796" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.484565" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.484786" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.448696" elapsed="0.036188"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.485790" elapsed="0.000092"/>
</kw>
<msg time="2026-08-15T23:55:45.485964" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.485055" elapsed="0.001139">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.485008" elapsed="0.001290">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.448415" elapsed="0.038187">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.447766" elapsed="0.038989"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.487682" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18094 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.566293" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.566509" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.487148" elapsed="0.079416"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.566675" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:45.567120" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.447348" elapsed="0.119920"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.567935" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.446504" elapsed="0.122551"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.444657" elapsed="0.124593"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.444049" elapsed="0.125323"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.442559" elapsed="0.126943"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.441888" elapsed="0.127711"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.570773" level="INFO">${next} = 18095</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.569996" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.572191" level="INFO">${current_port} = 18095</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.571246" elapsed="0.001053"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.435686" elapsed="0.136788"/>
</kw>
<msg time="2026-08-15T23:55:45.572566" level="INFO">Repeating keyword, round 266/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.575296" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.574938" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.574893" elapsed="0.000579"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.576287" level="INFO">${current_Date} = 2026-08-15 23:55:45.576</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.575931" elapsed="0.000389"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.576771" level="INFO">${ellapsed_seconds} = 2644.761</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.576469" elapsed="0.000342"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.577123" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.576886" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.576867" elapsed="0.000337"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.574347" elapsed="0.002903"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.577761" level="INFO">${number} = 266</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.577396" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.579219" level="INFO">${number} = 266</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.578866" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.581208" level="INFO">${device-port} = 18095</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.580399" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.584042" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.616062" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.616163" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.583940" elapsed="0.032250"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.616595" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:55:45.616657" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.616268" elapsed="0.000438">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.616244" elapsed="0.000505">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.583636" elapsed="0.033276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.583027" elapsed="0.033986"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.617396" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18095 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.683962" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.684179" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.617173" elapsed="0.067063"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.684363" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:45.684777" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.582567" elapsed="0.102373"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.685545" elapsed="0.000930"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.581744" elapsed="0.104929"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.579946" elapsed="0.106973"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.579406" elapsed="0.107623"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.578406" elapsed="0.108749"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.577960" elapsed="0.109291"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.688511" level="INFO">${next} = 18096</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.687643" elapsed="0.000930"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.689935" level="INFO">${current_port} = 18096</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.688988" elapsed="0.001046"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.573052" elapsed="0.117113"/>
</kw>
<msg time="2026-08-15T23:55:45.690253" level="INFO">Repeating keyword, round 267/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.692943" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.692660" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.692615" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.693791" level="INFO">${current_Date} = 2026-08-15 23:55:45.694</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.693419" elapsed="0.000469"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.694985" level="INFO">${ellapsed_seconds} = 2644.643</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.694227" elapsed="0.000819"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.695858" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.695208" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.695165" elapsed="0.000880"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.692100" elapsed="0.004052"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.696871" level="INFO">${number} = 267</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.696453" elapsed="0.000445"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.698338" level="INFO">${number} = 267</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.697992" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.700402" level="INFO">${device-port} = 18096</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.699574" elapsed="0.000908"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.703218" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.740197" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.740422" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.703115" elapsed="0.037368"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.741426" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:45.741563" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.740652" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.740606" elapsed="0.001336">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.702601" elapsed="0.039632">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.702202" elapsed="0.040200"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.743334" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18096 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.813017" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.813389" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.742785" elapsed="0.070668"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.813634" elapsed="0.000120"/>
</return>
<msg time="2026-08-15T23:55:45.814240" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.701765" elapsed="0.112597"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.815120" elapsed="0.001171"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.700956" elapsed="0.115554"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.699096" elapsed="0.117655"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.698526" elapsed="0.118389"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.697513" elapsed="0.119551"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.697056" elapsed="0.120120"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.818491" level="INFO">${next} = 18097</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.817562" elapsed="0.000994"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.820329" level="INFO">${current_port} = 18097</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.819127" elapsed="0.001271"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.690708" elapsed="0.129785"/>
</kw>
<msg time="2026-08-15T23:55:45.820553" level="INFO">Repeating keyword, round 268/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.822451" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.822275" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.822242" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.823168" level="INFO">${current_Date} = 2026-08-15 23:55:45.823</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.822889" elapsed="0.000320"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.823966" level="INFO">${ellapsed_seconds} = 2644.514</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.823441" elapsed="0.000566"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.824487" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.824116" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.824089" elapsed="0.000517"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.821903" elapsed="0.002771"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.825495" level="INFO">${number} = 268</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.824937" elapsed="0.000598"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.827713" level="INFO">${number} = 268</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.827195" elapsed="0.000558"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.830962" level="INFO">${device-port} = 18097</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.829583" elapsed="0.001502"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.833968" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.868489" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.868720" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.833579" elapsed="0.035203"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.869770" elapsed="0.000106"/>
</kw>
<msg time="2026-08-15T23:55:45.869960" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.868999" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.868951" elapsed="0.001212">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.833296" elapsed="0.037176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.832886" elapsed="0.037809"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.871600" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18097 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:45.936105" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.936346" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.871092" elapsed="0.065315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:45.936519" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:45.936972" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.832445" elapsed="0.104639"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:45.937663" elapsed="0.000963"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.831607" elapsed="0.107269"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.828899" elapsed="0.110179"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.828031" elapsed="0.111150"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.826483" elapsed="0.112844"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.825770" elapsed="0.113758"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.940601" level="INFO">${next} = 18098</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.939945" elapsed="0.000694"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.941461" level="INFO">${current_port} = 18098</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:45.940902" elapsed="0.000623"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.820961" elapsed="0.120647"/>
</kw>
<msg time="2026-08-15T23:55:45.941663" level="INFO">Repeating keyword, round 269/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:45.943313" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:45.943134" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.943107" elapsed="0.000312"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.943890" level="INFO">${current_Date} = 2026-08-15 23:55:45.944</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:45.943629" elapsed="0.000300"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:45.944585" level="INFO">${ellapsed_seconds} = 2644.393</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:45.944140" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.945086" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:45.944725" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:45.944697" elapsed="0.000502"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:45.942766" elapsed="0.002497"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.946027" level="INFO">${number} = 269</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.945481" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.948217" level="INFO">${number} = 269</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.947659" elapsed="0.000598"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:45.951248" level="INFO">${device-port} = 18098</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:45.949993" elapsed="0.001400"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.953956" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:45.988283" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:45.988513" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.953850" elapsed="0.034724"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:45.989541" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:45.989679" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:45.988741" elapsed="0.001207">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:45.988694" elapsed="0.001360">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:45.953519" elapsed="0.036820">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:45.953127" elapsed="0.037358"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:45.991371" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18098 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.064518" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.064757" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:45.990876" elapsed="0.073988"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.065006" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:55:46.065463" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:45.952688" elapsed="0.112896"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.066273" elapsed="0.001075"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:45.951894" elapsed="0.115661"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:45.949274" elapsed="0.118480"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:45.948495" elapsed="0.119475"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.946992" elapsed="0.121175"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:45.946308" elapsed="0.121963"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.069597" level="INFO">${next} = 18099</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.068627" elapsed="0.001034"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.071253" level="INFO">${current_port} = 18099</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.070145" elapsed="0.001222"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:45.941973" elapsed="0.129533"/>
</kw>
<msg time="2026-08-15T23:55:46.071596" level="INFO">Repeating keyword, round 270/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.074301" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.074028" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.073983" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.075363" level="INFO">${current_Date} = 2026-08-15 23:55:46.075</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.074914" elapsed="0.000480"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.075916" level="INFO">${ellapsed_seconds} = 2644.262</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.075551" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.076272" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.076018" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.075998" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.073439" elapsed="0.002960"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.076932" level="INFO">${number} = 270</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.076547" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.078385" level="INFO">${number} = 270</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.078037" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.080470" level="INFO">${device-port} = 18099</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.079644" elapsed="0.000908"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.083291" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.116524" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.116739" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.083020" elapsed="0.033772"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.117625" elapsed="0.000047"/>
</kw>
<msg time="2026-08-15T23:55:46.117733" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.116981" elapsed="0.000844">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.116933" elapsed="0.000966">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.082684" elapsed="0.035403">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.082295" elapsed="0.035968"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.118973" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18099 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.184410" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.184636" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.118612" elapsed="0.066081"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.184843" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:46.185268" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.081879" elapsed="0.103501"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.185989" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.081038" elapsed="0.106044"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.079186" elapsed="0.108084"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.078573" elapsed="0.108795"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.077567" elapsed="0.109925"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.077116" elapsed="0.110474"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.188884" level="INFO">${next} = 18100</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.187999" elapsed="0.000952"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.190321" level="INFO">${current_port} = 18100</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.189352" elapsed="0.001071"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.072081" elapsed="0.118482"/>
</kw>
<msg time="2026-08-15T23:55:46.190658" level="INFO">Repeating keyword, round 271/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.193001" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.192836" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.192789" elapsed="0.000303"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.193546" level="INFO">${current_Date} = 2026-08-15 23:55:46.193</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.193307" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.194258" level="INFO">${ellapsed_seconds} = 2644.144</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.193790" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.194737" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.194391" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.194365" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.192484" elapsed="0.002449"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.195667" level="INFO">${number} = 271</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.195138" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.197744" level="INFO">${number} = 271</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.197264" elapsed="0.000517"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.200639" level="INFO">${device-port} = 18100</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.199446" elapsed="0.001311"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.204615" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.236790" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.237061" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.204511" elapsed="0.032600"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.237968" elapsed="0.000052"/>
</kw>
<msg time="2026-08-15T23:55:46.238090" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.237269" elapsed="0.001023">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.237224" elapsed="0.001150">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.203959" elapsed="0.034711">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.203232" elapsed="0.035604"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.239563" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18100 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.312597" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.312759" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.239164" elapsed="0.073630"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.312911" elapsed="0.000061"/>
</return>
<msg time="2026-08-15T23:55:46.313214" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.202600" elapsed="0.110686"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.313664" elapsed="0.000629"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.201434" elapsed="0.112983"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.198795" elapsed="0.115762"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.198027" elapsed="0.116613"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.196612" elapsed="0.118155"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.195976" elapsed="0.118921"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.315923" level="INFO">${next} = 18101</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.315157" elapsed="0.000829"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.317320" level="INFO">${current_port} = 18101</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.316379" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.191186" elapsed="0.126360"/>
</kw>
<msg time="2026-08-15T23:55:46.317634" level="INFO">Repeating keyword, round 272/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.320422" elapsed="0.000056"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.320106" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.320061" elapsed="0.000593"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.321593" level="INFO">${current_Date} = 2026-08-15 23:55:46.321</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.321208" elapsed="0.000445"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.322767" level="INFO">${ellapsed_seconds} = 2644.016</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.322031" elapsed="0.000831"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.323582" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.323029" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.322986" elapsed="0.000774"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.319530" elapsed="0.004367"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.324846" level="INFO">${number} = 272</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.324420" elapsed="0.000467"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.326937" level="INFO">${number} = 272</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.326437" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.329653" level="INFO">${device-port} = 18101</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.328630" elapsed="0.001135"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.333265" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.364365" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.364534" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.333157" elapsed="0.031415"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.365218" elapsed="0.000038"/>
</kw>
<msg time="2026-08-15T23:55:46.365308" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.364698" elapsed="0.000683">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.364660" elapsed="0.000782">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.332645" elapsed="0.032995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.332148" elapsed="0.033675"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.366368" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18101 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.437017" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.437371" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.366056" elapsed="0.071372"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.437574" elapsed="0.000111"/>
</return>
<msg time="2026-08-15T23:55:46.438139" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.331524" elapsed="0.106727"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.438967" elapsed="0.000994"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.330410" elapsed="0.109741"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.327983" elapsed="0.112359"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.327207" elapsed="0.113238"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.325789" elapsed="0.114782"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.325123" elapsed="0.115547"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.441933" level="INFO">${next} = 18102</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.441099" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.443311" level="INFO">${current_port} = 18102</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.442365" elapsed="0.001042"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.318128" elapsed="0.125412"/>
</kw>
<msg time="2026-08-15T23:55:46.443629" level="INFO">Repeating keyword, round 273/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.446019" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.445855" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.445825" elapsed="0.000286"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.446550" level="INFO">${current_Date} = 2026-08-15 23:55:46.446</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.446317" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.447261" level="INFO">${ellapsed_seconds} = 2643.891</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.446792" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.447752" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.447394" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.447368" elapsed="0.000519"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.445492" elapsed="0.002458"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.448679" level="INFO">${number} = 273</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.448153" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.450719" level="INFO">${number} = 273</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.450247" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.453547" level="INFO">${device-port} = 18102</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.452418" elapsed="0.001240"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.457501" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.488925" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.489210" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.457351" elapsed="0.031923"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.490351" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:46.490517" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.489485" elapsed="0.001299">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.489423" elapsed="0.001513">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.456924" elapsed="0.034328">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.456026" elapsed="0.035500"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.492406" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18102 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.556928" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.557215" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.491949" elapsed="0.065330"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.557410" elapsed="0.000111"/>
</return>
<msg time="2026-08-15T23:55:46.557973" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.455428" elapsed="0.102671"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.558708" elapsed="0.000976"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.454294" elapsed="0.105639"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.451758" elapsed="0.108376"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.450999" elapsed="0.109242"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.449601" elapsed="0.110767"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.448963" elapsed="0.111503"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.561702" level="INFO">${next} = 18103</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.560853" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.563278" level="INFO">${current_port} = 18103</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.562193" elapsed="0.001190"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.444155" elapsed="0.119371"/>
</kw>
<msg time="2026-08-15T23:55:46.563620" level="INFO">Repeating keyword, round 274/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.566436" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.566173" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.566128" elapsed="0.000389"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.566911" level="INFO">${current_Date} = 2026-08-15 23:55:46.567</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.566718" elapsed="0.000219"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.567417" level="INFO">${ellapsed_seconds} = 2643.77</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.567087" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.567772" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.567515" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.567496" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.565591" elapsed="0.002323"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.568428" level="INFO">${number} = 274</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.568061" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.570007" level="INFO">${number} = 274</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.569604" elapsed="0.000431"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.572057" level="INFO">${device-port} = 18103</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.571236" elapsed="0.000902"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.574986" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.612504" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.612749" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.574884" elapsed="0.037963"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.613786" elapsed="0.000094"/>
</kw>
<msg time="2026-08-15T23:55:46.613965" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.613028" elapsed="0.001047">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.612977" elapsed="0.001194">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.574580" elapsed="0.039884">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.573947" elapsed="0.040768"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.615626" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18103 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.683945" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.684238" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.615116" elapsed="0.069201"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.684463" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:55:46.685000" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.573483" elapsed="0.111631"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.685732" elapsed="0.001049"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.572597" elapsed="0.114430"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.570748" elapsed="0.116480"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.570208" elapsed="0.117166"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.569104" elapsed="0.118413"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.568611" elapsed="0.119011"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.688875" level="INFO">${next} = 18104</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.688012" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.690323" level="INFO">${current_port} = 18104</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.689309" elapsed="0.001087"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.564153" elapsed="0.126329"/>
</kw>
<msg time="2026-08-15T23:55:46.690540" level="INFO">Repeating keyword, round 275/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.692282" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.692090" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.692060" elapsed="0.000313"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.692854" level="INFO">${current_Date} = 2026-08-15 23:55:46.693</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.692592" elapsed="0.000302"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.693634" level="INFO">${ellapsed_seconds} = 2643.644</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.693102" elapsed="0.000572"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.694159" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.693775" elapsed="0.000463"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.693749" elapsed="0.000526"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.691718" elapsed="0.002657"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.695192" level="INFO">${number} = 275</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.694638" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.697357" level="INFO">${number} = 275</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.696871" elapsed="0.000525"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.700265" level="INFO">${device-port} = 18104</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.699124" elapsed="0.001259"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.703684" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.736500" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.736732" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.703579" elapsed="0.033261"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.737915" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:55:46.738183" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.737042" elapsed="0.001338">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.736989" elapsed="0.001489">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.703282" elapsed="0.035476">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.702670" elapsed="0.036291"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.739793" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18104 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.804595" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.804917" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.739311" elapsed="0.065702"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.805191" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:55:46.805668" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.702218" elapsed="0.103564"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.806488" elapsed="0.000998"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.701036" elapsed="0.106646"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.698450" elapsed="0.109477"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.697658" elapsed="0.110376"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.696212" elapsed="0.111950"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.695530" elapsed="0.112733"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.809486" level="INFO">${next} = 18105</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.808636" elapsed="0.000912"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.810963" level="INFO">${current_port} = 18105</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.809968" elapsed="0.001095"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.690869" elapsed="0.120322"/>
</kw>
<msg time="2026-08-15T23:55:46.811282" level="INFO">Repeating keyword, round 276/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.814075" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.813781" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.813733" elapsed="0.000544"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.815136" level="INFO">${current_Date} = 2026-08-15 23:55:46.815</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.814715" elapsed="0.000482"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.815953" level="INFO">${ellapsed_seconds} = 2643.522</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.815453" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.816443" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.816093" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.816066" elapsed="0.000513"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.813176" elapsed="0.003470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.817415" level="INFO">${number} = 276</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.816881" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.819534" level="INFO">${number} = 276</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.819042" elapsed="0.000539"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.822513" level="INFO">${device-port} = 18105</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.821260" elapsed="0.001376"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.829108" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.856794" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.857069" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.828959" elapsed="0.028169"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.858051" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:46.858187" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.857299" elapsed="0.000997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.857252" elapsed="0.001136">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.828540" elapsed="0.030133">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.825052" elapsed="0.033913"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.859865" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18105 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:46.928763" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.929008" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.859325" elapsed="0.069738"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:46.929171" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:46.929578" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.824448" elapsed="0.105240"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:46.930291" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.823313" elapsed="0.108098"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.820583" elapsed="0.111023"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.819828" elapsed="0.111880"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.818372" elapsed="0.113506"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.817687" elapsed="0.114293"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.933113" level="INFO">${next} = 18106</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.932325" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.934426" level="INFO">${current_port} = 18106</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:46.933525" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.811752" elapsed="0.122893"/>
</kw>
<msg time="2026-08-15T23:55:46.934730" level="INFO">Repeating keyword, round 277/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:46.937289" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:46.937047" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.937004" elapsed="0.000424"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.938136" level="INFO">${current_Date} = 2026-08-15 23:55:46.938</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:46.937749" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:46.939306" level="INFO">${ellapsed_seconds} = 2643.399</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:46.938525" elapsed="0.000839"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.940136" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:46.939605" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:46.939561" elapsed="0.000654"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:46.936494" elapsed="0.003766"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.940766" level="INFO">${number} = 277</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.940404" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.942202" level="INFO">${number} = 277</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.941864" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:46.944220" level="INFO">${device-port} = 18106</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:46.943413" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.946974" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:46.984677" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:46.984949" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.946871" elapsed="0.038138"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:46.985951" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:46.986087" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:46.985181" elapsed="0.001097">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:46.985132" elapsed="0.001245">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:46.946373" elapsed="0.040278">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:46.945986" elapsed="0.040807"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:46.987654" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18106 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.052713" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.053030" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:46.987174" elapsed="0.065913"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.053220" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:55:47.053693" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:46.945554" elapsed="0.108301"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.054462" elapsed="0.000951"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:46.944745" elapsed="0.110889"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:46.942965" elapsed="0.112933"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:46.942392" elapsed="0.113620"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.941406" elapsed="0.114735"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:46.940962" elapsed="0.115277"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.057402" level="INFO">${next} = 18107</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.056589" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.058733" level="INFO">${current_port} = 18107</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.057866" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:46.935250" elapsed="0.123772"/>
</kw>
<msg time="2026-08-15T23:55:47.059109" level="INFO">Repeating keyword, round 278/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.061238" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.061080" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.061052" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.061849" level="INFO">${current_Date} = 2026-08-15 23:55:47.062</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.061596" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.062541" level="INFO">${ellapsed_seconds} = 2643.275</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.062098" elapsed="0.000479"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.063058" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.062676" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.062651" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.060727" elapsed="0.002523"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.064001" level="INFO">${number} = 278</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.063457" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.066034" level="INFO">${number} = 278</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.065531" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.068963" level="INFO">${device-port} = 18107</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.067707" elapsed="0.001382"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.071971" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.104919" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.105148" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.071613" elapsed="0.033595"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.106134" elapsed="0.000094"/>
</kw>
<msg time="2026-08-15T23:55:47.106311" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.105376" elapsed="0.001043">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.105329" elapsed="0.001182">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.071326" elapsed="0.035496">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.070916" elapsed="0.036120"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.107905" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18107 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.176934" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.177155" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.107389" elapsed="0.069823"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.177328" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:47.177737" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.070479" elapsed="0.107413"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.178466" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.069663" elapsed="0.109886"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.067063" elapsed="0.112675"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.066294" elapsed="0.113583"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.064903" elapsed="0.115104"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.064254" elapsed="0.115851"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.181291" level="INFO">${next} = 18108</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.180479" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.182615" level="INFO">${current_port} = 18108</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.181715" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.059604" elapsed="0.123281"/>
</kw>
<msg time="2026-08-15T23:55:47.182976" level="INFO">Repeating keyword, round 279/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.185513" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.185272" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.185230" elapsed="0.000424"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.186358" level="INFO">${current_Date} = 2026-08-15 23:55:47.186</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.186013" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.187457" level="INFO">${ellapsed_seconds} = 2643.151</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.186749" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.188273" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.187672" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.187631" elapsed="0.000825"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.184708" elapsed="0.003850"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.189624" level="INFO">${number} = 279</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.188915" elapsed="0.000737"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.191094" level="INFO">${number} = 279</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.190736" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.193153" level="INFO">${device-port} = 18108</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.192335" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.195760" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.228215" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.228375" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.195660" elapsed="0.032784"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.229450" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:47.229606" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.228656" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.228605" elapsed="0.001366">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.195378" elapsed="0.034886">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.194977" elapsed="0.035433"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.231508" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18108 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.296840" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.297071" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.230900" elapsed="0.066226"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.297247" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:47.297721" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.194540" elapsed="0.103347"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.298466" elapsed="0.000929"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.193698" elapsed="0.105893"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.191841" elapsed="0.107943"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.191286" elapsed="0.108653"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.190285" elapsed="0.109784"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.189825" elapsed="0.110342"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.301343" level="INFO">${next} = 18109</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.300514" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.302676" level="INFO">${current_port} = 18109</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.301769" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.183399" elapsed="0.119569"/>
</kw>
<msg time="2026-08-15T23:55:47.303057" level="INFO">Repeating keyword, round 280/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.305641" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.305392" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.305347" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.306498" level="INFO">${current_Date} = 2026-08-15 23:55:47.306</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.306228" elapsed="0.000307"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.307212" level="INFO">${ellapsed_seconds} = 2643.031</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.306744" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.307692" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.307348" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.307323" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.304776" elapsed="0.003114"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.308605" level="INFO">${number} = 280</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.308095" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.310649" level="INFO">${number} = 280</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.310164" elapsed="0.000523"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.313517" level="INFO">${device-port} = 18109</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.312333" elapsed="0.001294"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.317204" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.348285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.348514" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.317058" elapsed="0.031515"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.349493" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:47.349628" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.348741" elapsed="0.000993">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.348693" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.316536" elapsed="0.033606">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.315990" elapsed="0.034365"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.351235" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18109 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.416525" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.416738" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.350712" elapsed="0.066081"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.416950" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:47.417358" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.315389" elapsed="0.102079"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.418074" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.314273" elapsed="0.104917"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.311671" elapsed="0.107709"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.310928" elapsed="0.108552"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.309521" elapsed="0.110082"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.308878" elapsed="0.110821"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.420884" level="INFO">${next} = 18110</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.420087" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.422194" level="INFO">${current_port} = 18110</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.421306" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.303489" elapsed="0.118954"/>
</kw>
<msg time="2026-08-15T23:55:47.422532" level="INFO">Repeating keyword, round 281/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.425080" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.424827" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.424756" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.425918" level="INFO">${current_Date} = 2026-08-15 23:55:47.426</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.425544" elapsed="0.000436"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.427072" level="INFO">${ellapsed_seconds} = 2642.911</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.426355" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.427643" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.427291" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.427247" elapsed="0.000475"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.424271" elapsed="0.003497"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.428293" level="INFO">${number} = 281</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.427929" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.429725" level="INFO">${number} = 281</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.429385" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.431733" level="INFO">${device-port} = 18110</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.430947" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.434315" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.468601" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.468858" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.434214" elapsed="0.034708"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.469855" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:47.469993" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.469091" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.469043" elapsed="0.001310">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.433919" elapsed="0.036710">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.433508" elapsed="0.037262"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.471651" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18110 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.544549" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.544765" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.471157" elapsed="0.073706"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.544979" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:47.545390" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.433091" elapsed="0.112411"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.546107" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.432270" elapsed="0.114930"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.430466" elapsed="0.116961"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.429925" elapsed="0.117605"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.428937" elapsed="0.118718"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.428474" elapsed="0.119278"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.548958" level="INFO">${next} = 18111</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.548153" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.550281" level="INFO">${current_port} = 18111</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.549380" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.423013" elapsed="0.127495"/>
</kw>
<msg time="2026-08-15T23:55:47.550594" level="INFO">Repeating keyword, round 282/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.553180" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.552931" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.552887" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.554116" level="INFO">${current_Date} = 2026-08-15 23:55:47.554</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.553730" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.555284" level="INFO">${ellapsed_seconds} = 2642.783</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.554510" elapsed="0.000842"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.555739" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.555486" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.555462" elapsed="0.000376"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.552363" elapsed="0.003523"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.556408" level="INFO">${number} = 282</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.556034" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.557857" level="INFO">${number} = 282</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.557498" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.559861" level="INFO">${device-port} = 18111</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.559058" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.562536" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.596252" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.596472" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.562285" elapsed="0.034246"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.597457" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:47.597592" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.596702" elapsed="0.000995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.596653" elapsed="0.001136">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.562008" elapsed="0.036104">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.561598" elapsed="0.036729"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.599208" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18111 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.672775" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.673027" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.598680" elapsed="0.074401"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.673194" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:47.673615" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.561180" elapsed="0.112548"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.674353" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.560379" elapsed="0.115047"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.558572" elapsed="0.117044"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.558046" elapsed="0.117673"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.557052" elapsed="0.118839"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.556589" elapsed="0.119404"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.677154" level="INFO">${next} = 18112</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.676359" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.678560" level="INFO">${current_port} = 18112</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.677577" elapsed="0.001083"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.551076" elapsed="0.127714"/>
</kw>
<msg time="2026-08-15T23:55:47.678948" level="INFO">Repeating keyword, round 283/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.681460" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.681215" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.681171" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.682308" level="INFO">${current_Date} = 2026-08-15 23:55:47.682</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.681963" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.683411" level="INFO">${ellapsed_seconds} = 2642.655</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.682698" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.684229" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.683628" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.683586" elapsed="0.000840"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.680650" elapsed="0.003849"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.685036" level="INFO">${number} = 283</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.684656" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.686469" level="INFO">${number} = 283</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.686126" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.688452" level="INFO">${device-port} = 18112</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.687632" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.691134" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.724502" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.724729" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.691033" elapsed="0.033759"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.725738" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:47.725906" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.725005" elapsed="0.001101">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.724955" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.690577" elapsed="0.035900">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.690188" elapsed="0.036431"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.727525" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18112 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.796671" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.796918" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.727035" elapsed="0.069942"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.797104" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:47.797508" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.689755" elapsed="0.107862"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.798217" elapsed="0.000876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.688981" elapsed="0.110301"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.687187" elapsed="0.112282"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.686653" elapsed="0.112918"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.685663" elapsed="0.114032"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.685217" elapsed="0.114576"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.800995" level="INFO">${next} = 18113</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.800184" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.802313" level="INFO">${current_port} = 18113</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.801422" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.679371" elapsed="0.123166"/>
</kw>
<msg time="2026-08-15T23:55:47.802623" level="INFO">Repeating keyword, round 284/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.805226" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.804977" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.804931" elapsed="0.000451"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.805780" level="INFO">${current_Date} = 2026-08-15 23:55:47.806</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.805624" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.806282" level="INFO">${ellapsed_seconds} = 2642.531</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.805975" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.806617" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.806379" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.806361" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.804371" elapsed="0.002380"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.807282" level="INFO">${number} = 284</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.806915" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.808709" level="INFO">${number} = 284</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.808371" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.810705" level="INFO">${device-port} = 18113</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.809927" elapsed="0.000859"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.813391" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.848509" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.848747" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.813294" elapsed="0.035550"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.849744" elapsed="0.000085"/>
</kw>
<msg time="2026-08-15T23:55:47.849914" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.849024" elapsed="0.000997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.848972" elapsed="0.001142">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.812874" elapsed="0.037513">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.812443" elapsed="0.038158"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.851486" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18113 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:47.920329" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.920716" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.850997" elapsed="0.069783"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:47.921056" elapsed="0.000141"/>
</return>
<msg time="2026-08-15T23:55:47.921654" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.812032" elapsed="0.109739"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:47.922623" elapsed="0.001155"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.811236" elapsed="0.112881"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.809460" elapsed="0.114892"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.808936" elapsed="0.115527"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.807927" elapsed="0.116664"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.807464" elapsed="0.117227"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.926145" level="INFO">${next} = 18114</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.925159" elapsed="0.001060"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.927702" level="INFO">${current_port} = 18114</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:47.926610" elapsed="0.001246"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.803105" elapsed="0.124941"/>
</kw>
<msg time="2026-08-15T23:55:47.928188" level="INFO">Repeating keyword, round 285/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:47.930740" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:47.930612" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.930589" elapsed="0.000235"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.931168" level="INFO">${current_Date} = 2026-08-15 23:55:47.931</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:47.930981" elapsed="0.000217"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:47.931701" level="INFO">${ellapsed_seconds} = 2642.406</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:47.931352" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.932084" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:47.931815" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:47.931780" elapsed="0.000387"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:47.930330" elapsed="0.001895"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.932750" level="INFO">${number} = 285</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.932375" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.934279" level="INFO">${number} = 285</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.933918" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:47.936432" level="INFO">${device-port} = 18114</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:47.935550" elapsed="0.000967"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.939465" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:47.972861" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:47.973191" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.939356" elapsed="0.033897"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:47.974372" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:47.974520" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:47.973480" elapsed="0.001282">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:47.973412" elapsed="0.001528">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:47.939068" elapsed="0.036199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:47.938411" elapsed="0.037029"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:47.976632" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18114 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.044707" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.045153" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:47.975892" elapsed="0.069326"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.045392" elapsed="0.000124"/>
</return>
<msg time="2026-08-15T23:55:48.045985" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:47.937992" elapsed="0.108125"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.046857" elapsed="0.001160"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:47.937056" elapsed="0.111189"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:47.935062" elapsed="0.113387"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:47.934474" elapsed="0.114084"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.933423" elapsed="0.115267"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:47.932953" elapsed="0.115838"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.050088" level="INFO">${next} = 18115</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.049216" elapsed="0.000935"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.051553" level="INFO">${current_port} = 18115</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.050553" elapsed="0.001102"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:47.928716" elapsed="0.123074"/>
</kw>
<msg time="2026-08-15T23:55:48.051924" level="INFO">Repeating keyword, round 286/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.054746" elapsed="0.000085"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.054479" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.054431" elapsed="0.000524"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.055852" level="INFO">${current_Date} = 2026-08-15 23:55:48.056</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.055431" elapsed="0.000486"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.057047" level="INFO">${ellapsed_seconds} = 2642.281</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.056258" elapsed="0.000852"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.057890" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.057272" elapsed="0.000748"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.057231" elapsed="0.000844"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.053900" elapsed="0.004280"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.059432" level="INFO">${number} = 286</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.058545" elapsed="0.000933"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.061745" level="INFO">${number} = 286</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.061210" elapsed="0.000577"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.064402" level="INFO">${device-port} = 18115</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.063565" elapsed="0.000920"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.067398" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.096516" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.096856" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.067282" elapsed="0.029638"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.098066" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:48.098214" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.097142" elapsed="0.001187">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.097076" elapsed="0.001352">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.067000" elapsed="0.031742">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.066300" elapsed="0.032724"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.099963" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18115 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.168494" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.168729" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.099411" elapsed="0.069374"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.168950" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:48.169417" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.065878" elapsed="0.103652"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.170153" elapsed="0.000978"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.065019" elapsed="0.106306"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.062961" elapsed="0.108558"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.062053" elapsed="0.109569"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.060502" elapsed="0.111247"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.059717" elapsed="0.112179"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.173156" level="INFO">${next} = 18116</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.172303" elapsed="0.000914"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.174143" level="INFO">${current_port} = 18116</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.173553" elapsed="0.000650"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.052451" elapsed="0.121838"/>
</kw>
<msg time="2026-08-15T23:55:48.174348" level="INFO">Repeating keyword, round 287/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.176058" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.175897" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.175868" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.176711" level="INFO">${current_Date} = 2026-08-15 23:55:48.177</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.176461" elapsed="0.000287"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.177453" level="INFO">${ellapsed_seconds} = 2642.16</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.176986" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.177964" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.177588" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.177562" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.175537" elapsed="0.002603"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.178879" level="INFO">${number} = 287</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.178343" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.180941" level="INFO">${number} = 287</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.180433" elapsed="0.000546"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.184818" level="INFO">${device-port} = 18116</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.183035" elapsed="0.001882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.188302" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.220888" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.221097" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.188179" elapsed="0.032960"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.221861" elapsed="0.000049"/>
</kw>
<msg time="2026-08-15T23:55:48.221988" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.221270" elapsed="0.000879">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.221230" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.187791" elapsed="0.034662">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.187021" elapsed="0.035579"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.223633" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18116 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.292899" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.293219" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.223065" elapsed="0.070225"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.293431" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:55:48.294049" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.186480" elapsed="0.107688"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.294843" elapsed="0.001024"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.185487" elapsed="0.110668"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.182279" elapsed="0.114111"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.181320" elapsed="0.115183"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.179763" elapsed="0.116892"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.179136" elapsed="0.117742"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.298317" level="INFO">${next} = 18117</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.297298" elapsed="0.001077"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.299220" level="INFO">${current_port} = 18117</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.298614" elapsed="0.000669"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.174650" elapsed="0.124733"/>
</kw>
<msg time="2026-08-15T23:55:48.299439" level="INFO">Repeating keyword, round 288/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.301198" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.301031" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.301000" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.301908" level="INFO">${current_Date} = 2026-08-15 23:55:48.302</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.301612" elapsed="0.000336"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.302637" level="INFO">${ellapsed_seconds} = 2642.035</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.302177" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.303171" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.302772" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.302747" elapsed="0.000556"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.300652" elapsed="0.002718"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.304137" level="INFO">${number} = 288</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.303580" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.306312" level="INFO">${number} = 288</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.305765" elapsed="0.000585"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.309342" level="INFO">${device-port} = 18117</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.308076" elapsed="0.001412"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.314950" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.344215" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.344495" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.314835" elapsed="0.029750"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.345749" elapsed="0.000098"/>
</kw>
<msg time="2026-08-15T23:55:48.345937" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.344766" elapsed="0.001284">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.344715" elapsed="0.001444">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.314516" elapsed="0.032011">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.311520" elapsed="0.035328"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.347979" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18117 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.416632" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.416916" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.347323" elapsed="0.069653"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.417119" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:55:48.417614" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.311102" elapsed="0.106622"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.418357" elapsed="0.004324"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.310216" elapsed="0.112862"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.307388" elapsed="0.115891"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.306587" elapsed="0.116810"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.305097" elapsed="0.118412"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.304413" elapsed="0.119187"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.424563" level="INFO">${next} = 18118</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.423929" elapsed="0.000685"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.425612" level="INFO">${current_port} = 18118</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.424937" elapsed="0.000741"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.299753" elapsed="0.126037"/>
</kw>
<msg time="2026-08-15T23:55:48.425886" level="INFO">Repeating keyword, round 289/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.427716" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.427551" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.427519" elapsed="0.000314"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.428287" level="INFO">${current_Date} = 2026-08-15 23:55:48.428</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.428048" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.429012" level="INFO">${ellapsed_seconds} = 2641.909</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.428532" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.429498" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.429149" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.429122" elapsed="0.000486"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.427207" elapsed="0.002463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.430404" level="INFO">${number} = 289</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.429892" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.432536" level="INFO">${number} = 289</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.432058" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.435409" level="INFO">${device-port} = 18118</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.434220" elapsed="0.001338"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.438425" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.468499" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.468730" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.438299" elapsed="0.030490"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.469769" elapsed="0.000110"/>
</kw>
<msg time="2026-08-15T23:55:48.469963" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.469022" elapsed="0.001173">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.468969" elapsed="0.001329">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.437758" elapsed="0.032830">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.437342" elapsed="0.033390"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.471591" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18118 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.536453" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.536692" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.471111" elapsed="0.065640"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.536916" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:55:48.537359" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.436908" elapsed="0.100563"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.538121" elapsed="0.000990"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.436055" elapsed="0.103261"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.433558" elapsed="0.105964"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.432816" elapsed="0.106815"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.431407" elapsed="0.108351"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.430690" elapsed="0.109229"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.541280" level="INFO">${next} = 18119</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.540384" elapsed="0.000965"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.542262" level="INFO">${current_port} = 18119</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.541644" elapsed="0.000681"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.426248" elapsed="0.116162"/>
</kw>
<msg time="2026-08-15T23:55:48.542473" level="INFO">Repeating keyword, round 290/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.544210" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.544033" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.544004" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.544848" level="INFO">${current_Date} = 2026-08-15 23:55:48.545</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.544586" elapsed="0.000302"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.545572" level="INFO">${ellapsed_seconds} = 2641.792</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.545110" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.546105" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.545710" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.545684" elapsed="0.000538"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.543647" elapsed="0.002640"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.547056" level="INFO">${number} = 290</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.546494" elapsed="0.000600"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.549353" level="INFO">${number} = 290</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.548778" elapsed="0.000616"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.551890" level="INFO">${device-port} = 18119</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.551068" elapsed="0.000929"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.554726" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.588473" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.588710" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.554458" elapsed="0.034310"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.589673" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:48.589835" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.588972" elapsed="0.000972">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.588925" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.554168" elapsed="0.036140">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.553738" elapsed="0.036786"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.591476" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18119 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.656921" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.657181" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.590907" elapsed="0.066331"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.657382" elapsed="0.000121"/>
</return>
<msg time="2026-08-15T23:55:48.657990" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.553317" elapsed="0.104789"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.658765" elapsed="0.001006"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.552467" elapsed="0.107544"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.550570" elapsed="0.109643"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.549705" elapsed="0.110615"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.548041" elapsed="0.112407"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.547316" elapsed="0.113241"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.661867" level="INFO">${next} = 18120</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.660970" elapsed="0.000963"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.663254" level="INFO">${current_port} = 18120</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.662310" elapsed="0.001043"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.542778" elapsed="0.120706"/>
</kw>
<msg time="2026-08-15T23:55:48.663573" level="INFO">Repeating keyword, round 291/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.666433" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.666161" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.666111" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.666933" level="INFO">${current_Date} = 2026-08-15 23:55:48.667</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.666736" elapsed="0.000224"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.667451" level="INFO">${ellapsed_seconds} = 2641.67</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.667111" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.667832" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.667547" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.667528" elapsed="0.000388"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.665521" elapsed="0.002441"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.668483" level="INFO">${number} = 291</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.668111" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.670030" level="INFO">${number} = 291</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.669637" elapsed="0.000420"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.672090" level="INFO">${device-port} = 18120</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.671257" elapsed="0.000916"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.674733" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.708319" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.708576" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.674632" elapsed="0.034008"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.709608" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:48.709748" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.708847" elapsed="0.001145">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.708760" elapsed="0.001336">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.674345" elapsed="0.036059">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.673940" elapsed="0.036617"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.711449" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18120 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.775936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.776150" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.710942" elapsed="0.065263"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.776316" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:48.776724" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.673477" elapsed="0.103418"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.777479" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.672626" elapsed="0.105970"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.670768" elapsed="0.108026"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.670221" elapsed="0.108756"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.669151" elapsed="0.110019"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.668664" elapsed="0.110606"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.780448" level="INFO">${next} = 18121</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.779622" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.781797" level="INFO">${current_port} = 18121</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.780920" elapsed="0.001043"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.664120" elapsed="0.117993"/>
</kw>
<msg time="2026-08-15T23:55:48.782201" level="INFO">Repeating keyword, round 292/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.784382" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.784227" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.784200" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.784970" level="INFO">${current_Date} = 2026-08-15 23:55:48.785</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.784728" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.785671" level="INFO">${ellapsed_seconds} = 2641.552</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.785231" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.786181" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.785831" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.785782" elapsed="0.000515"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.783875" elapsed="0.002487"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.787139" level="INFO">${number} = 292</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.786569" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.789222" level="INFO">${number} = 292</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.788701" elapsed="0.000559"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.792213" level="INFO">${device-port} = 18121</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.791050" elapsed="0.001281"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.795951" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.831929" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.832190" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.795770" elapsed="0.036481"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.833310" elapsed="0.000070"/>
</kw>
<msg time="2026-08-15T23:55:48.833469" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.832439" elapsed="0.001154">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.832385" elapsed="0.001312">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.795468" elapsed="0.038588">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.794880" elapsed="0.039415"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.835232" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18121 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:48.900479" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.900937" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.834684" elapsed="0.066338"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:48.901195" elapsed="0.000109"/>
</return>
<msg time="2026-08-15T23:55:48.901734" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.794131" elapsed="0.107768"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:48.902576" elapsed="0.001027"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.792978" elapsed="0.110867"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.790267" elapsed="0.113790"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.789486" elapsed="0.114701"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.788051" elapsed="0.116305"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.787397" elapsed="0.117068"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.905736" level="INFO">${next} = 18122</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.904881" elapsed="0.000959"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.907286" level="INFO">${current_port} = 18122</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:48.906243" elapsed="0.001146"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.782713" elapsed="0.124831"/>
</kw>
<msg time="2026-08-15T23:55:48.907646" level="INFO">Repeating keyword, round 293/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:48.910210" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:48.910041" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.910008" elapsed="0.000307"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.910818" level="INFO">${current_Date} = 2026-08-15 23:55:48.911</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:48.910546" elapsed="0.000316"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:48.911561" level="INFO">${ellapsed_seconds} = 2641.426</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:48.911080" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.912102" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:48.911699" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:48.911671" elapsed="0.000549"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:48.909657" elapsed="0.002629"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.913069" level="INFO">${number} = 293</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.912497" elapsed="0.000612"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.915183" level="INFO">${number} = 293</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.914657" elapsed="0.000564"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:48.918103" level="INFO">${device-port} = 18122</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:48.916935" elapsed="0.001283"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.921585" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:48.952213" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:48.952323" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.921476" elapsed="0.030874"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:48.953376" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:48.953526" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:48.952512" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:48.952455" elapsed="0.001458">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:48.921165" elapsed="0.033096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:48.920644" elapsed="0.033771"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:48.955378" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18122 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.024528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.024861" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:48.954783" elapsed="0.070167"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.025166" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:55:49.025706" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:48.920059" elapsed="0.105867"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.026611" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:48.918867" elapsed="0.108867"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:48.916265" elapsed="0.111714"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:48.915449" elapsed="0.112634"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.914019" elapsed="0.114190"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:48.913336" elapsed="0.114970"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.029462" level="INFO">${next} = 18123</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.028658" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.030914" level="INFO">${current_port} = 18123</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.029985" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:48.908283" elapsed="0.122863"/>
</kw>
<msg time="2026-08-15T23:55:49.031233" level="INFO">Repeating keyword, round 294/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.033896" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.033538" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.033496" elapsed="0.000562"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.034699" level="INFO">${current_Date} = 2026-08-15 23:55:49.035</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.034514" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.035228" level="INFO">${ellapsed_seconds} = 2641.302</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.034895" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.035635" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.035353" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.035327" elapsed="0.000392"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.033003" elapsed="0.002763"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.036314" level="INFO">${number} = 294</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.035940" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.037782" level="INFO">${number} = 294</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.037419" elapsed="0.000416"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.039811" level="INFO">${device-port} = 18123</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.039002" elapsed="0.000896"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.042536" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.080490" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.080764" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.042279" elapsed="0.038601"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.081853" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:49.081993" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.081064" elapsed="0.001038">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.081012" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.042003" elapsed="0.040476">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.041576" elapsed="0.041128"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.083584" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18123 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.148839" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.149079" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.083094" elapsed="0.066041"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.149256" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:49.149696" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.041147" elapsed="0.108700"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.150434" elapsed="0.000960"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.040342" elapsed="0.111250"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.038526" elapsed="0.113259"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.037997" elapsed="0.113940"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.036967" elapsed="0.115101"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.036497" elapsed="0.115670"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.153320" level="INFO">${next} = 18124</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.152513" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.154651" level="INFO">${current_port} = 18124</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.153738" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.031667" elapsed="0.123290"/>
</kw>
<msg time="2026-08-15T23:55:49.155078" level="INFO">Repeating keyword, round 295/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.157467" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.157310" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.157281" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.158014" level="INFO">${current_Date} = 2026-08-15 23:55:49.158</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.157760" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.158710" level="INFO">${ellapsed_seconds} = 2641.179</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.158260" elapsed="0.000486"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.159222" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.158865" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.158837" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.156967" elapsed="0.002430"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.160126" level="INFO">${number} = 295</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.159599" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.162137" level="INFO">${number} = 295</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.161642" elapsed="0.000532"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.165009" level="INFO">${device-port} = 18124</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.163828" elapsed="0.001298"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.168570" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.200351" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.200599" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.168306" elapsed="0.032355"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.201625" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:49.201764" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.200881" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.200788" elapsed="0.001323">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.168030" elapsed="0.034399">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.167572" elapsed="0.035006"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.203463" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18124 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.273203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.273423" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.202964" elapsed="0.070516"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.273593" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:49.274049" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.166972" elapsed="0.107190"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.274740" elapsed="0.000928"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.165840" elapsed="0.110059"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.163178" elapsed="0.112917"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.162395" elapsed="0.113803"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.161024" elapsed="0.115298"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.160379" elapsed="0.116038"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.277615" level="INFO">${next} = 18125</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.276767" elapsed="0.000909"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.279004" level="INFO">${current_port} = 18125</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.278094" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.155890" elapsed="0.123344"/>
</kw>
<msg time="2026-08-15T23:55:49.279321" level="INFO">Repeating keyword, round 296/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.281765" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.281609" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.281582" elapsed="0.000294"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.282352" level="INFO">${current_Date} = 2026-08-15 23:55:49.282</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.282131" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.283067" level="INFO">${ellapsed_seconds} = 2641.055</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.282603" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.283542" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.283203" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.283177" elapsed="0.000475"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.281143" elapsed="0.002572"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.284457" level="INFO">${number} = 296</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.283940" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.286514" level="INFO">${number} = 296</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.286039" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.289324" level="INFO">${device-port} = 18125</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.288184" elapsed="0.001327"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.292465" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.328385" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.328609" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.292201" elapsed="0.036465"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.329595" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:49.329732" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.328881" elapsed="0.000989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.328786" elapsed="0.001183">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.291928" elapsed="0.038316">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.291519" elapsed="0.038938"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.331315" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18125 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.400721" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.401020" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.330834" elapsed="0.070242"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.401203" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:55:49.401653" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.291094" elapsed="0.110669"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.402404" elapsed="0.002009"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.290158" elapsed="0.114446"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.287525" elapsed="0.117270"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.286771" elapsed="0.118171"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.285400" elapsed="0.119683"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.284711" elapsed="0.120476"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.406363" level="INFO">${next} = 18126</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.405546" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.407704" level="INFO">${current_port} = 18126</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.406837" elapsed="0.000961"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.279753" elapsed="0.128231"/>
</kw>
<msg time="2026-08-15T23:55:49.408073" level="INFO">Repeating keyword, round 297/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.410875" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.410581" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.410533" elapsed="0.000489"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.411595" level="INFO">${current_Date} = 2026-08-15 23:55:49.411</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.411351" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.412311" level="INFO">${ellapsed_seconds} = 2640.926</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.411857" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.412796" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.412448" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.412423" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.409956" elapsed="0.003035"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.413885" level="INFO">${number} = 297</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.413354" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.415947" level="INFO">${number} = 297</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.415452" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.418713" level="INFO">${device-port} = 18126</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.417590" elapsed="0.001269"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.422594" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.452341" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.452567" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.422470" elapsed="0.030155"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.453594" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:49.453740" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.452793" elapsed="0.001221">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.452744" elapsed="0.001374">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.421711" elapsed="0.032700">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.421175" elapsed="0.033377"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.455408" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18126 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.520402" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.520626" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.454928" elapsed="0.065757"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.520853" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:49.521306" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.420574" elapsed="0.100851"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.522072" elapsed="0.000958"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.419467" elapsed="0.103763"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.416972" elapsed="0.106459"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.416204" elapsed="0.107336"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.414825" elapsed="0.108848"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.414137" elapsed="0.109638"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.525092" level="INFO">${next} = 18127</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.524237" elapsed="0.000919"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.526050" level="INFO">${current_port} = 18127</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.525471" elapsed="0.000640"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.408569" elapsed="0.117625"/>
</kw>
<msg time="2026-08-15T23:55:49.526248" level="INFO">Repeating keyword, round 298/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.527863" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.527684" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.527656" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.528479" level="INFO">${current_Date} = 2026-08-15 23:55:49.528</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.528248" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.529183" level="INFO">${ellapsed_seconds} = 2640.809</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.528722" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.529663" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.529318" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.529293" elapsed="0.000481"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.527351" elapsed="0.002508"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.530569" level="INFO">${number} = 298</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.530063" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.532585" level="INFO">${number} = 298</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.532113" elapsed="0.000509"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.535368" level="INFO">${device-port} = 18127</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.534251" elapsed="0.001230"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.538487" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.572628" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.572888" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.538387" elapsed="0.034564"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.573858" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:49.573997" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.573118" elapsed="0.000984">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.573071" elapsed="0.001122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.538107" elapsed="0.036359">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.537514" elapsed="0.037164"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.575624" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18127 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.644929" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.645156" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.575083" elapsed="0.070128"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.645323" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:49.645725" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.537102" elapsed="0.108790"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.646463" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.536167" elapsed="0.111367"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.533592" elapsed="0.114131"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.532862" elapsed="0.114996"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.531462" elapsed="0.116525"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.530840" elapsed="0.117243"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.649209" level="INFO">${next} = 18128</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.648427" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.650555" level="INFO">${current_port} = 18128</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.649626" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.526520" elapsed="0.124259"/>
</kw>
<msg time="2026-08-15T23:55:49.650915" level="INFO">Repeating keyword, round 299/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.653438" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.653195" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.653153" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.654347" level="INFO">${current_Date} = 2026-08-15 23:55:49.654</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.653995" elapsed="0.000419"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.655086" level="INFO">${ellapsed_seconds} = 2640.683</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.654637" elapsed="0.000486"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.655554" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.655221" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.655194" elapsed="0.000468"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.652630" elapsed="0.003095"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.656467" level="INFO">${number} = 299</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.655960" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.658502" level="INFO">${number} = 299</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.658028" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.661289" level="INFO">${device-port} = 18128</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.660170" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.665302" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.697106" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.697329" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.665167" elapsed="0.032221"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.698303" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:49.698436" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.697555" elapsed="0.001066">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.697507" elapsed="0.001212">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.664680" elapsed="0.034342">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.663891" elapsed="0.035273"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.700019" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18128 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.768427" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.768634" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.699508" elapsed="0.069180"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.768834" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:49.769236" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.663293" elapsed="0.106050"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.769935" elapsed="0.000830"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.662177" elapsed="0.108812"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.659506" elapsed="0.111671"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.658759" elapsed="0.112517"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.657367" elapsed="0.114031"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.656719" elapsed="0.114819"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.772670" level="INFO">${next} = 18129</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.771931" elapsed="0.000800"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.774025" level="INFO">${current_port} = 18129</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.773139" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.651337" elapsed="0.122917"/>
</kw>
<msg time="2026-08-15T23:55:49.774339" level="INFO">Repeating keyword, round 300/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.776891" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.776617" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.776575" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.777775" level="INFO">${current_Date} = 2026-08-15 23:55:49.778</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.777434" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.778899" level="INFO">${ellapsed_seconds} = 2640.559</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.778199" elapsed="0.000761"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.779695" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.779121" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.779079" elapsed="0.000832"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.776087" elapsed="0.003927"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.780792" level="INFO">${number} = 300</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.780344" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.782234" level="INFO">${number} = 300</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.781890" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.784238" level="INFO">${device-port} = 18129</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.783427" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.789560" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.820409" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.820633" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.789460" elapsed="0.031230"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.821603" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:49.821737" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.820900" elapsed="0.000977">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.820848" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.789169" elapsed="0.033075">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.785997" elapsed="0.036463"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.823370" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18129 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:49.892570" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.892780" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.822882" elapsed="0.069992"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:49.892988" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:49.893420" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.785553" elapsed="0.107977"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:49.894135" elapsed="0.000886"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.784756" elapsed="0.110455"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.782963" elapsed="0.112437"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.782418" elapsed="0.113082"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.781433" elapsed="0.114188"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.780989" elapsed="0.114729"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.896895" level="INFO">${next} = 18130</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.896106" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.898249" level="INFO">${current_port} = 18130</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:49.897332" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.774756" elapsed="0.123719"/>
</kw>
<msg time="2026-08-15T23:55:49.898560" level="INFO">Repeating keyword, round 301/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:49.901202" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:49.900905" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.900860" elapsed="0.000484"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.902075" level="INFO">${current_Date} = 2026-08-15 23:55:49.902</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:49.901666" elapsed="0.000445"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:49.902582" level="INFO">${ellapsed_seconds} = 2640.435</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:49.902273" elapsed="0.000335"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.902932" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:49.902678" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:49.902660" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:49.900340" elapsed="0.002716"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.903560" level="INFO">${number} = 301</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.903199" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.905013" level="INFO">${number} = 301</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.904639" elapsed="0.000403"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:49.906983" level="INFO">${device-port} = 18130</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:49.906195" elapsed="0.000868"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.909681" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:49.948255" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:49.948478" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.909584" elapsed="0.038952"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:49.949457" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:49.949588" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:49.948707" elapsed="0.001066">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:49.948656" elapsed="0.001250">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:49.909134" elapsed="0.041046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:49.908710" elapsed="0.041608"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:49.951371" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18130 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.020732" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.020983" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:49.950764" elapsed="0.070274"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.021148" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:50.021546" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:49.908304" elapsed="0.113351"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.022263" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:49.907502" elapsed="0.115845"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:49.905725" elapsed="0.117814"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:49.905200" elapsed="0.118440"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.904199" elapsed="0.119568"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:49.903739" elapsed="0.120175"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.025070" level="INFO">${next} = 18131</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.024263" elapsed="0.000869"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.026399" level="INFO">${current_port} = 18131</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.025499" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:49.899098" elapsed="0.127523"/>
</kw>
<msg time="2026-08-15T23:55:50.026706" level="INFO">Repeating keyword, round 302/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.028615" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.028463" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.028437" elapsed="0.000267"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.029194" level="INFO">${current_Date} = 2026-08-15 23:55:50.029</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.028974" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.029884" level="INFO">${ellapsed_seconds} = 2640.308</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.029438" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.030348" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.030019" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.029994" elapsed="0.000463"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.028134" elapsed="0.002387"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.031287" level="INFO">${number} = 302</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.030738" elapsed="0.000586"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.033290" level="INFO">${number} = 302</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.032816" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.036121" level="INFO">${device-port} = 18131</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.034991" elapsed="0.001243"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.039925" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.072408" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.072639" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.039575" elapsed="0.033122"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.073633" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:50.073770" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.072911" elapsed="0.001000">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.072860" elapsed="0.001172">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.039217" elapsed="0.035127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.038623" elapsed="0.035966"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.075535" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18131 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.140494" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.140710" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.075007" elapsed="0.065758"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.140932" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:50.141353" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.038019" elapsed="0.103443"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.142068" elapsed="0.000897"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.036892" elapsed="0.106265"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.034290" elapsed="0.109061"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.033547" elapsed="0.109905"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.032182" elapsed="0.111393"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.031543" elapsed="0.112128"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.144910" level="INFO">${next} = 18132</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.144056" elapsed="0.000917"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.146237" level="INFO">${current_port} = 18132</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.145333" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.027265" elapsed="0.119196"/>
</kw>
<msg time="2026-08-15T23:55:50.146546" level="INFO">Repeating keyword, round 303/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.149178" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.148928" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.148883" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.149842" level="INFO">${current_Date} = 2026-08-15 23:55:50.150</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.149596" elapsed="0.000285"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.150536" level="INFO">${ellapsed_seconds} = 2640.187</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.150094" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.151037" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.150672" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.150645" elapsed="0.000507"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.148300" elapsed="0.002916"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.151987" level="INFO">${number} = 303</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.151427" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.154046" level="INFO">${number} = 303</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.153548" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.156864" level="INFO">${device-port} = 18132</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.155700" elapsed="0.001282"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.160410" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.192423" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.192528" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.160271" elapsed="0.032284"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.192982" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:55:50.193043" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.192634" elapsed="0.000497">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.192611" elapsed="0.000565">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.159885" elapsed="0.033417">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.159310" elapsed="0.034066"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.194262" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18132 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.260415" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.260624" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.193751" elapsed="0.066928"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.260789" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:55:50.261236" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.158706" elapsed="0.102641"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.261954" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.157593" elapsed="0.105473"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.155075" elapsed="0.108197"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.154308" elapsed="0.109067"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.152922" elapsed="0.110578"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.152244" elapsed="0.111352"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.264740" level="INFO">${next} = 18133</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.263989" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.266108" level="INFO">${current_port} = 18133</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.265216" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.147029" elapsed="0.119307"/>
</kw>
<msg time="2026-08-15T23:55:50.266422" level="INFO">Repeating keyword, round 304/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.269083" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.268832" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.268759" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.270007" level="INFO">${current_Date} = 2026-08-15 23:55:50.270</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.269627" elapsed="0.000441"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.271170" level="INFO">${ellapsed_seconds} = 2640.067</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.270403" elapsed="0.000826"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.271720" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.271395" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.271347" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.268273" elapsed="0.003590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.272375" level="INFO">${number} = 304</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.272011" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.273822" level="INFO">${number} = 304</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.273465" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.275851" level="INFO">${device-port} = 18133</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.275050" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.278414" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.312711" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.312974" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.278316" elapsed="0.034720"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.313954" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:50.314106" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.313204" elapsed="0.001006">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.313156" elapsed="0.001149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.278036" elapsed="0.036539">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.277623" elapsed="0.037169"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.315685" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18133 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.384405" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.384617" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.315183" elapsed="0.069490"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.384874" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:50.385280" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.277209" elapsed="0.108181"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.385997" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.276388" elapsed="0.110685"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.274538" elapsed="0.112724"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.274010" elapsed="0.113353"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.273017" elapsed="0.114470"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.272556" elapsed="0.115029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.388741" level="INFO">${next} = 18134</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.387976" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.390110" level="INFO">${current_port} = 18134</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.389223" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.266925" elapsed="0.123410"/>
</kw>
<msg time="2026-08-15T23:55:50.390421" level="INFO">Repeating keyword, round 305/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.393027" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.392736" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.392690" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.393686" level="INFO">${current_Date} = 2026-08-15 23:55:50.394</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.393513" elapsed="0.000200"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.394185" level="INFO">${ellapsed_seconds} = 2639.943</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.393875" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.394517" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.394281" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.394263" elapsed="0.000332"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.392156" elapsed="0.002484"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.395170" level="INFO">${number} = 305</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.394785" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.396976" level="INFO">${number} = 305</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.396258" elapsed="0.000746"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.398974" level="INFO">${device-port} = 18134</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.398187" elapsed="0.000868"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.401518" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.436491" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.436713" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.401421" elapsed="0.035350"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.437688" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:50.437851" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.436983" elapsed="0.001087">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.436935" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.401146" elapsed="0.037330">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.400727" elapsed="0.037891"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.439491" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18134 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.512576" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.512787" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.438999" elapsed="0.073885"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.512996" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:50.513394" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.400303" elapsed="0.113200"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.514099" elapsed="0.000904"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.399503" elapsed="0.115686"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.397708" elapsed="0.117689"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.397174" elapsed="0.118326"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.395793" elapsed="0.119830"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.395351" elapsed="0.120367"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.516894" level="INFO">${next} = 18135</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.516108" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.518199" level="INFO">${current_port} = 18135</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.517317" elapsed="0.000978"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.390902" elapsed="0.127521"/>
</kw>
<msg time="2026-08-15T23:55:50.518531" level="INFO">Repeating keyword, round 306/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.521093" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.520844" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.520772" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.522012" level="INFO">${current_Date} = 2026-08-15 23:55:50.522</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.521632" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.523169" level="INFO">${ellapsed_seconds} = 2639.815</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.522446" elapsed="0.000782"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.523724" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.523393" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.523346" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.520278" elapsed="0.003589"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.524380" level="INFO">${number} = 306</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.524015" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.525823" level="INFO">${number} = 306</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.525469" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.527793" level="INFO">${device-port} = 18135</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.527025" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.530335" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.564351" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.564580" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.530220" elapsed="0.034418"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.565552" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:50.565702" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.564846" elapsed="0.001007">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.564758" elapsed="0.001194">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.529944" elapsed="0.036278">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.529536" elapsed="0.036906"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.567333" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18135 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.636500" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.636714" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.566829" elapsed="0.069940"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.636921" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:50.637323" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.529126" elapsed="0.108305"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.638032" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.528329" elapsed="0.110779"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.526548" elapsed="0.112747"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.526010" elapsed="0.113385"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.525023" elapsed="0.114493"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.524562" elapsed="0.115050"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.640762" level="INFO">${next} = 18136</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.639999" elapsed="0.000868"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.642115" level="INFO">${current_port} = 18136</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.641232" elapsed="0.000981"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.519016" elapsed="0.123323"/>
</kw>
<msg time="2026-08-15T23:55:50.642425" level="INFO">Repeating keyword, round 307/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.645030" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.644748" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.644704" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.645686" level="INFO">${current_Date} = 2026-08-15 23:55:50.646</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.645516" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.646180" level="INFO">${ellapsed_seconds} = 2639.691</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.645878" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.646509" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.646275" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.646257" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.644150" elapsed="0.002483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.647155" level="INFO">${number} = 307</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.646777" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.648592" level="INFO">${number} = 307</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.648242" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.650556" level="INFO">${device-port} = 18136</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.649759" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.653250" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.688540" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.688642" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.653008" elapsed="0.035660"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.689086" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:55:50.689146" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.688746" elapsed="0.000486">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.688723" elapsed="0.000553">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.652696" elapsed="0.036717">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.652306" elapsed="0.037268"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.690443" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18136 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.760443" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.760657" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.689961" elapsed="0.070752"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.760864" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:50.761268" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.651883" elapsed="0.109493"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.761976" elapsed="0.000937"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.651089" elapsed="0.112015"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.649315" elapsed="0.113976"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.648776" elapsed="0.114615"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.647782" elapsed="0.115732"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.647337" elapsed="0.116271"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.764736" level="INFO">${next} = 18137</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.763995" elapsed="0.000844"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.766086" level="INFO">${current_port} = 18137</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.765205" elapsed="0.000978"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.642896" elapsed="0.123433"/>
</kw>
<msg time="2026-08-15T23:55:50.766417" level="INFO">Repeating keyword, round 308/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.768968" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.768689" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.768646" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.769952" level="INFO">${current_Date} = 2026-08-15 23:55:50.770</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.769564" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.771117" level="INFO">${ellapsed_seconds} = 2639.567</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.770401" elapsed="0.000775"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.771698" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.771333" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.771292" elapsed="0.000485"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.768162" elapsed="0.003676"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.772348" level="INFO">${number} = 308</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.771986" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.773772" level="INFO">${number} = 308</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.773437" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.775757" level="INFO">${device-port} = 18137</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.774982" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.778467" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.816572" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.816794" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.778226" elapsed="0.038667"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.817830" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:50.817968" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.817062" elapsed="0.001011">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.817013" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.777923" elapsed="0.040512">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.777515" elapsed="0.041123"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.819496" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18137 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:50.888617" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.888861" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.819017" elapsed="0.069902"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:50.889030" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:50.889431" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.777106" elapsed="0.112434"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:50.890148" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.776297" elapsed="0.114912"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.774507" elapsed="0.116894"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.773972" elapsed="0.117532"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.772991" elapsed="0.118637"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.772530" elapsed="0.119193"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.892955" level="INFO">${next} = 18138</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.892109" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.894265" level="INFO">${current_port} = 18138</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:50.893376" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.766903" elapsed="0.127588"/>
</kw>
<msg time="2026-08-15T23:55:50.894578" level="INFO">Repeating keyword, round 309/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:50.896931" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:50.896756" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.896730" elapsed="0.000290"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.897440" level="INFO">${current_Date} = 2026-08-15 23:55:50.897</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:50.897220" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:50.898128" level="INFO">${ellapsed_seconds} = 2639.44</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:50.897681" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.898592" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:50.898263" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:50.898236" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:50.896367" elapsed="0.002397"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.899493" level="INFO">${number} = 309</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.898990" elapsed="0.000539"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.901510" level="INFO">${number} = 309</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.901044" elapsed="0.000503"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:50.904379" level="INFO">${device-port} = 18138</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:50.903231" elapsed="0.001262"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.908338" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:50.940963" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:50.941185" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.908202" elapsed="0.033041"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:50.942149" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:50.942281" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:50.941410" elapsed="0.001051">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:50.941361" elapsed="0.001197">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:50.907384" elapsed="0.035469">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:50.906848" elapsed="0.036150"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:50.943890" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18138 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.012459" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.012686" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:50.943369" elapsed="0.069375"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.012901" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:51.013311" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:50.906251" elapsed="0.107175"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.014039" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:50.905136" elapsed="0.110021"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:50.902575" elapsed="0.112774"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:50.901766" elapsed="0.113685"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.900403" elapsed="0.115172"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:50.899746" elapsed="0.115925"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.016863" level="INFO">${next} = 18139</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.016061" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.018182" level="INFO">${current_port} = 18139</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.017293" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:50.895060" elapsed="0.123374"/>
</kw>
<msg time="2026-08-15T23:55:51.018521" level="INFO">Repeating keyword, round 310/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.021082" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.020826" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.020754" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.022010" level="INFO">${current_Date} = 2026-08-15 23:55:51.022</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.021629" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.022847" level="INFO">${ellapsed_seconds} = 2639.315</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.022466" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.023180" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.022945" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.022927" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.020264" elapsed="0.003039"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.023828" level="INFO">${number} = 310</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.023450" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.025260" level="INFO">${number} = 310</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.024921" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.027257" level="INFO">${device-port} = 18139</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.026457" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.029952" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.068496" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.068717" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.029852" elapsed="0.038922"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.069752" elapsed="0.000104"/>
</kw>
<msg time="2026-08-15T23:55:51.069945" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.068993" elapsed="0.001062">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.068945" elapsed="0.001201">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.029557" elapsed="0.040856">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.029005" elapsed="0.041701"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.071652" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18139 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.136350" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.136591" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.071165" elapsed="0.065485"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.136828" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:51.137237" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.028580" elapsed="0.108764"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.137931" elapsed="0.000838"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.027775" elapsed="0.111231"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.025984" elapsed="0.113210"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.025444" elapsed="0.113850"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.024463" elapsed="0.114953"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.024011" elapsed="0.115500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.140674" level="INFO">${next} = 18140</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.139894" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.142069" level="INFO">${current_port} = 18140</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.141175" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.019001" elapsed="0.123324"/>
</kw>
<msg time="2026-08-15T23:55:51.142422" level="INFO">Repeating keyword, round 311/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.145133" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.144887" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.144842" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.145720" level="INFO">${current_Date} = 2026-08-15 23:55:51.146</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.145567" elapsed="0.000180"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.146215" level="INFO">${ellapsed_seconds} = 2639.191</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.145910" elapsed="0.000331"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.146548" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.146311" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.146293" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.144271" elapsed="0.002401"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.147194" level="INFO">${number} = 311</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.146831" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.148638" level="INFO">${number} = 311</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.148294" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.150595" level="INFO">${device-port} = 18140</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.149821" elapsed="0.000853"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.153314" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.188605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.188864" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.153218" elapsed="0.035708"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.189791" elapsed="0.000117"/>
</kw>
<msg time="2026-08-15T23:55:51.190015" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.189091" elapsed="0.001150">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.189046" elapsed="0.001299">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.152942" elapsed="0.037680">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.152338" elapsed="0.038428"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.191702" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18140 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.257030" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.257250" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.191185" elapsed="0.066119"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.257419" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:51.257872" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.151919" elapsed="0.106071"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.258550" elapsed="0.000930"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.151130" elapsed="0.108537"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.149358" elapsed="0.110533"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.148845" elapsed="0.111150"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.147832" elapsed="0.112286"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.147374" elapsed="0.112836"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.261346" level="INFO">${next} = 18141</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.260552" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.262677" level="INFO">${current_port} = 18141</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.261764" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.142921" elapsed="0.120050"/>
</kw>
<msg time="2026-08-15T23:55:51.263058" level="INFO">Repeating keyword, round 312/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.265598" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.265357" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.265315" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.266513" level="INFO">${current_Date} = 2026-08-15 23:55:51.266</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.266165" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.267626" level="INFO">${ellapsed_seconds} = 2639.071</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.266993" elapsed="0.000661"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.267981" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.267725" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.267707" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.264794" elapsed="0.003311"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.268614" level="INFO">${number} = 312</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.268251" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.270058" level="INFO">${number} = 312</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.269701" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.272036" level="INFO">${device-port} = 18141</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.271250" elapsed="0.000864"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.277281" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.312332" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.312567" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.277182" elapsed="0.035444"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.313599" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:51.313737" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.312830" elapsed="0.001083">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.312748" elapsed="0.001270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.276895" elapsed="0.037405">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.273790" elapsed="0.040719"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.315372" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18141 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.380283" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.380516" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.314890" elapsed="0.065682"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.380688" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:51.381184" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.273375" elapsed="0.107925"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.381916" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.272561" elapsed="0.110505"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.270777" elapsed="0.112484"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.270243" elapsed="0.113120"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.269259" elapsed="0.114229"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.268795" elapsed="0.114790"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.384751" level="INFO">${next} = 18142</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.383986" elapsed="0.000915"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.385972" level="INFO">${current_port} = 18142</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.385287" elapsed="0.000748"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.263488" elapsed="0.122627"/>
</kw>
<msg time="2026-08-15T23:55:51.386169" level="INFO">Repeating keyword, round 313/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.387741" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.387588" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.387562" elapsed="0.000327"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.388319" level="INFO">${current_Date} = 2026-08-15 23:55:51.388</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.388095" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.389042" level="INFO">${ellapsed_seconds} = 2638.949</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.388559" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.389511" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.389177" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.389150" elapsed="0.000469"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.387257" elapsed="0.002425"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.390411" level="INFO">${number} = 313</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.389903" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.392415" level="INFO">${number} = 313</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.391945" elapsed="0.000507"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.395288" level="INFO">${device-port} = 18142</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.394148" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.398915" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.431711" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.431834" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.398699" elapsed="0.033170"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.432288" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:55:51.432348" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.431945" elapsed="0.000530">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.431924" elapsed="0.000665">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.398250" elapsed="0.034659">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.397846" elapsed="0.035208"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.433906" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18142 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.504443" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.504732" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.433400" elapsed="0.071391"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.504961" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:55:51.505422" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.397283" elapsed="0.108254"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.506179" elapsed="0.000968"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.396075" elapsed="0.111272"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.393467" elapsed="0.114077"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.392671" elapsed="0.114979"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.391308" elapsed="0.116467"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.390663" elapsed="0.117260"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.509152" level="INFO">${next} = 18143</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.508276" elapsed="0.000939"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.510500" level="INFO">${current_port} = 18143</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.509583" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.386435" elapsed="0.124290"/>
</kw>
<msg time="2026-08-15T23:55:51.510867" level="INFO">Repeating keyword, round 314/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.514387" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.514093" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.514041" elapsed="0.000502"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.515529" level="INFO">${current_Date} = 2026-08-15 23:55:51.515</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.515100" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.516081" level="INFO">${ellapsed_seconds} = 2638.822</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.515731" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.516456" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.516178" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.516159" elapsed="0.000397"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.513379" elapsed="0.003224"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.517147" level="INFO">${number} = 314</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.516753" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.518605" level="INFO">${number} = 314</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.518261" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.520661" level="INFO">${device-port} = 18143</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.519842" elapsed="0.000902"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.523461" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.556116" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.556347" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.523171" elapsed="0.033235"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.557343" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:51.557484" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.556569" elapsed="0.001022">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.556524" elapsed="0.001161">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.522888" elapsed="0.035118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.522451" elapsed="0.035777"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.559198" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18143 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.628358" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.628572" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.558646" elapsed="0.069980"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.628736" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:55:51.629205" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.522030" elapsed="0.107290"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.629918" elapsed="0.000841"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.521212" elapsed="0.109779"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.519361" elapsed="0.111818"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.518794" elapsed="0.112486"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.517797" elapsed="0.113637"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.517331" elapsed="0.114201"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.632647" level="INFO">${next} = 18144</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.631911" elapsed="0.000796"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.633858" level="INFO">${current_port} = 18144</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.633114" elapsed="0.000805"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.511911" elapsed="0.122088"/>
</kw>
<msg time="2026-08-15T23:55:51.634053" level="INFO">Repeating keyword, round 315/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.635584" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.635433" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.635407" elapsed="0.000265"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.636113" level="INFO">${current_Date} = 2026-08-15 23:55:51.636</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.635897" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.636787" level="INFO">${ellapsed_seconds} = 2638.701</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.636357" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.637291" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.636945" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.636918" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.635105" elapsed="0.002360"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.638202" level="INFO">${number} = 315</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.637667" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.640228" level="INFO">${number} = 315</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.639727" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.643041" level="INFO">${device-port} = 18144</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.641928" elapsed="0.001225"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.646372" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.684215" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.684460" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.646273" elapsed="0.038248"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.685428" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:51.685561" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.684684" elapsed="0.001058">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.684639" elapsed="0.001233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.645993" elapsed="0.040153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.645525" elapsed="0.040764"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.687149" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18144 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.752181" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.752389" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.686638" elapsed="0.065805"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.752552" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:55:51.752991" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.644887" elapsed="0.108215"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.753655" elapsed="0.000890"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.643758" elapsed="0.110975"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.641262" elapsed="0.113699"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.640484" elapsed="0.114580"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.639101" elapsed="0.116088"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.638456" elapsed="0.116828"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.756452" level="INFO">${next} = 18145</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.755659" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.757778" level="INFO">${current_port} = 18145</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.756930" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.634315" elapsed="0.123727"/>
</kw>
<msg time="2026-08-15T23:55:51.758127" level="INFO">Repeating keyword, round 316/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.760665" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.760415" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.760345" elapsed="0.000494"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.761587" level="INFO">${current_Date} = 2026-08-15 23:55:51.761</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.761240" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.762782" level="INFO">${ellapsed_seconds} = 2638.576</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.762015" elapsed="0.000859"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.763590" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.763035" elapsed="0.000619"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.762994" elapsed="0.000684"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.759858" elapsed="0.003866"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.764283" level="INFO">${number} = 316</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.763889" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.765721" level="INFO">${number} = 316</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.765381" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.767716" level="INFO">${device-port} = 18145</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.766921" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.770268" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.804198" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.804420" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.770169" elapsed="0.034310"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.805393" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:51.805528" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.804645" elapsed="0.000989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.804599" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.769886" elapsed="0.036138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.769470" elapsed="0.036769"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.807199" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18145 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.872033" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.872262" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.806666" elapsed="0.065653"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.872435" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:51.872893" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.769055" elapsed="0.103956"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.873582" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.768255" elapsed="0.106445"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.766452" elapsed="0.108487"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.765926" elapsed="0.109116"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.764928" elapsed="0.110240"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.764465" elapsed="0.110800"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.876414" level="INFO">${next} = 18146</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.875614" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.877778" level="INFO">${current_port} = 18146</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:51.876878" elapsed="0.001065"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.758545" elapsed="0.119526"/>
</kw>
<msg time="2026-08-15T23:55:51.878158" level="INFO">Repeating keyword, round 317/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:51.879899" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:51.879702" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.879675" elapsed="0.000314"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.880407" level="INFO">${current_Date} = 2026-08-15 23:55:51.880</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:51.880192" elapsed="0.000252"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:51.881095" level="INFO">${ellapsed_seconds} = 2638.457</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:51.880650" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.881570" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:51.881229" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:51.881202" elapsed="0.000481"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:51.879370" elapsed="0.002376"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.882496" level="INFO">${number} = 317</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.881983" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.884531" level="INFO">${number} = 317</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.884054" elapsed="0.000515"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:51.887402" level="INFO">${device-port} = 18146</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:51.886285" elapsed="0.001231"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.890972" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:51.924270" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.924492" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.890867" elapsed="0.033684"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:51.925477" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:51.925610" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:51.924715" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:51.924668" elapsed="0.001264">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:51.890486" elapsed="0.035723">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:51.889925" elapsed="0.036425"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:51.927213" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18146 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:51.996670" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:51.996930" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:51.926697" elapsed="0.070292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:51.997104" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:51.997530" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:51.889276" elapsed="0.108383"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:51.998269" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:51.888155" elapsed="0.111199"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:51.885614" elapsed="0.113929"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:51.884791" elapsed="0.114852"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.883405" elapsed="0.116360"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:51.882751" elapsed="0.117185"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.001088" level="INFO">${next} = 18147</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.000287" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.002402" level="INFO">${current_port} = 18147</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.001509" elapsed="0.000989"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:51.878557" elapsed="0.124071"/>
</kw>
<msg time="2026-08-15T23:55:52.002715" level="INFO">Repeating keyword, round 318/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.005287" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.005045" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.005002" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.006269" level="INFO">${current_Date} = 2026-08-15 23:55:52.006</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.005914" elapsed="0.000415"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.007386" level="INFO">${ellapsed_seconds} = 2638.331</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.006661" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.008225" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.007605" elapsed="0.000745"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.007563" elapsed="0.000847"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.004482" elapsed="0.004044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.009075" level="INFO">${number} = 318</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.008693" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.010507" level="INFO">${number} = 318</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.010166" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.012495" level="INFO">${device-port} = 18147</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.011673" elapsed="0.000901"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.015019" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.048438" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.048679" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.014917" elapsed="0.033821"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.049651" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:52.049784" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.048943" elapsed="0.000981">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.048895" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.014622" elapsed="0.035672">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.014229" elapsed="0.036280"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.051402" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18147 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.116437" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.116649" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.050893" elapsed="0.065813"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.116854" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:52.117261" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.013821" elapsed="0.103550"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.117968" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.013032" elapsed="0.106030"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.011228" elapsed="0.108022"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.010692" elapsed="0.108657"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.009703" elapsed="0.109769"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.009257" elapsed="0.110310"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.120698" level="INFO">${next} = 18148</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.119953" elapsed="0.000805"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.122070" level="INFO">${current_port} = 18148</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.121172" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.003208" elapsed="0.119107"/>
</kw>
<msg time="2026-08-15T23:55:52.122407" level="INFO">Repeating keyword, round 319/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.124955" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.124681" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.124639" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.125754" level="INFO">${current_Date} = 2026-08-15 23:55:52.126</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.125419" elapsed="0.000431"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.126769" level="INFO">${ellapsed_seconds} = 2638.211</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.126179" elapsed="0.000648"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.127253" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.126927" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.126900" elapsed="0.000461"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.124156" elapsed="0.003268"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.128152" level="INFO">${number} = 319</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.127625" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.130184" level="INFO">${number} = 319</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.129662" elapsed="0.000569"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.133025" level="INFO">${device-port} = 18148</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.131886" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.136788" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.172554" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.172791" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.136454" elapsed="0.036436"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.173898" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:52.174039" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.173097" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.173046" elapsed="0.001288">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.136073" elapsed="0.038606">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.135488" elapsed="0.039408"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.175833" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18148 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.244552" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.244889" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.175289" elapsed="0.069698"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.245124" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:55:52.245638" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.134918" elapsed="0.110834"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.246408" elapsed="0.000969"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.133747" elapsed="0.113832"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.131233" elapsed="0.116625"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.130461" elapsed="0.117526"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.129045" elapsed="0.119074"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.128402" elapsed="0.119814"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.249724" level="INFO">${next} = 18149</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.248639" elapsed="0.001208"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.251256" level="INFO">${current_port} = 18149</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.250256" elapsed="0.001102"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.122898" elapsed="0.128633"/>
</kw>
<msg time="2026-08-15T23:55:52.251626" level="INFO">Repeating keyword, round 320/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.253950" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.253831" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.253795" elapsed="0.000220"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.254377" level="INFO">${current_Date} = 2026-08-15 23:55:52.254</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.254207" elapsed="0.000197"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.254918" level="INFO">${ellapsed_seconds} = 2638.083</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.254563" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.255269" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.255017" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.254997" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.253550" elapsed="0.001845"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.255953" level="INFO">${number} = 320</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.255563" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.257438" level="INFO">${number} = 320</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.257093" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.259480" level="INFO">${device-port} = 18149</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.258657" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.262265" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.296183" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.296428" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.262010" elapsed="0.034478"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.297445" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:52.297584" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.296663" elapsed="0.001031">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.296613" elapsed="0.001174">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.261705" elapsed="0.036407">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.261303" elapsed="0.037025"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.299209" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18149 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.364566" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.364948" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.298685" elapsed="0.066333"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.365159" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:55:52.365653" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.260890" elapsed="0.104878"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.366476" elapsed="0.001068"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.260039" elapsed="0.107726"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.258191" elapsed="0.109818"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.257632" elapsed="0.110482"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.256617" elapsed="0.111628"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.256137" elapsed="0.112208"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.369666" level="INFO">${next} = 18150</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.368758" elapsed="0.000971"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.371253" level="INFO">${current_port} = 18150</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.370170" elapsed="0.001196"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.252119" elapsed="0.119386"/>
</kw>
<msg time="2026-08-15T23:55:52.371573" level="INFO">Repeating keyword, round 321/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.373389" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.373225" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.373195" elapsed="0.000290"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.373964" level="INFO">${current_Date} = 2026-08-15 23:55:52.374</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.373693" elapsed="0.000314"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.374697" level="INFO">${ellapsed_seconds} = 2637.963</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.374235" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.375254" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.374855" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.374826" elapsed="0.000539"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.372853" elapsed="0.002578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.376209" level="INFO">${number} = 321</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.375634" elapsed="0.000614"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.378377" level="INFO">${number} = 321</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.377862" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.381365" level="INFO">${device-port} = 18150</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.380172" elapsed="0.001312"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.385577" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.416678" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.416985" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.385394" elapsed="0.031658"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.418050" elapsed="0.000076"/>
</kw>
<msg time="2026-08-15T23:55:52.418223" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.417230" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.417180" elapsed="0.001414">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.384647" elapsed="0.034303">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.383980" elapsed="0.035126"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.420051" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18150 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.492519" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.492752" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.419462" elapsed="0.073386"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.492985" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:55:52.493424" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.383355" elapsed="0.110208"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.494217" elapsed="0.000953"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.382150" elapsed="0.113220"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.379483" elapsed="0.116082"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.378650" elapsed="0.117016"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.377175" elapsed="0.118615"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.376478" elapsed="0.119461"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.497148" level="INFO">${next} = 18151</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.496310" elapsed="0.000903"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.498574" level="INFO">${current_port} = 18151</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.497650" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.371939" elapsed="0.126780"/>
</kw>
<msg time="2026-08-15T23:55:52.498773" level="INFO">Repeating keyword, round 322/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.500434" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.500277" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.500249" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.501030" level="INFO">${current_Date} = 2026-08-15 23:55:52.501</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.500780" elapsed="0.000289"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.501766" level="INFO">${ellapsed_seconds} = 2637.836</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.501297" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.502285" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.501933" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.501907" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.499919" elapsed="0.002547"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.503228" level="INFO">${number} = 322</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.502673" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.505313" level="INFO">${number} = 322</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.504781" elapsed="0.000573"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.508190" level="INFO">${device-port} = 18151</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.507057" elapsed="0.001255"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.511769" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.544426" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.544692" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.511666" elapsed="0.033085"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.545947" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:52.546087" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.545110" elapsed="0.001088">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.545051" elapsed="0.001242">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.511321" elapsed="0.035273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.510729" elapsed="0.036135"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.547727" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18151 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.616289" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.616500" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.547234" elapsed="0.069322"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.616669" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:52.617128" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.510161" elapsed="0.107079"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.617839" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.508974" elapsed="0.109982"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.506369" elapsed="0.112781"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.505586" elapsed="0.113669"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.504141" elapsed="0.115239"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.503489" elapsed="0.115987"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.620662" level="INFO">${next} = 18152</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.619887" elapsed="0.000834"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.622115" level="INFO">${current_port} = 18152</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.621139" elapsed="0.001073"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.499092" elapsed="0.123253"/>
</kw>
<msg time="2026-08-15T23:55:52.622432" level="INFO">Repeating keyword, round 323/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.624819" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.624694" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.624676" elapsed="0.000209"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.625197" level="INFO">${current_Date} = 2026-08-15 23:55:52.625</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.625032" elapsed="0.000191"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.625701" level="INFO">${ellapsed_seconds} = 2637.712</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.625371" elapsed="0.000356"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.626062" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.625810" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.625778" elapsed="0.000363"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.624259" elapsed="0.001928"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.626695" level="INFO">${number} = 323</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.626332" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.628176" level="INFO">${number} = 323</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.627820" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.630168" level="INFO">${device-port} = 18152</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.629364" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.632911" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.668010" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.668116" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.632794" elapsed="0.035349"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.668720" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:52.668898" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.668223" elapsed="0.000868">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.668200" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.632519" elapsed="0.036952">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.631956" elapsed="0.037657"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.670475" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18152 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.736427" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.736682" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.669992" elapsed="0.066747"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.736901" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:55:52.737373" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.631507" elapsed="0.105978"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.738152" elapsed="0.001106"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.630697" elapsed="0.108763"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.628913" elapsed="0.110770"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.628362" elapsed="0.111434"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.627343" elapsed="0.112665"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.626892" elapsed="0.113238"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.741449" level="INFO">${next} = 18153</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.740515" elapsed="0.000997"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.742843" level="INFO">${current_port} = 18153</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.741958" elapsed="0.000955"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.622911" elapsed="0.120097"/>
</kw>
<msg time="2026-08-15T23:55:52.743064" level="INFO">Repeating keyword, round 324/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.744742" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.744583" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.744554" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.745376" level="INFO">${current_Date} = 2026-08-15 23:55:52.745</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.745139" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.746124" level="INFO">${ellapsed_seconds} = 2637.592</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.745628" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.746627" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.746278" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.746252" elapsed="0.000486"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.744227" elapsed="0.002594"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.747564" level="INFO">${number} = 324</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.747047" elapsed="0.000556"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.749646" level="INFO">${number} = 324</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.749163" elapsed="0.000521"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.752571" level="INFO">${device-port} = 18153</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.751432" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.758517" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.788787" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.789061" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.758409" elapsed="0.030713"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.790081" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:52.790223" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.789290" elapsed="0.001048">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.789243" elapsed="0.001212">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.758111" elapsed="0.032649">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.755046" elapsed="0.035992"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.791975" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18153 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.860619" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.860921" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.791430" elapsed="0.069571"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.861116" elapsed="0.000105"/>
</return>
<msg time="2026-08-15T23:55:52.861591" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.754585" elapsed="0.107114"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.862431" elapsed="0.000993"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.753344" elapsed="0.110282"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.750751" elapsed="0.113115"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.749944" elapsed="0.114084"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.748492" elapsed="0.115675"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.747843" elapsed="0.116471"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.865634" level="INFO">${next} = 18154</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.864713" elapsed="0.000984"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.867076" level="INFO">${current_port} = 18154</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.866109" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.743363" elapsed="0.123943"/>
</kw>
<msg time="2026-08-15T23:55:52.867410" level="INFO">Repeating keyword, round 325/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.869820" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.869692" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.869673" elapsed="0.000214"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.870196" level="INFO">${current_Date} = 2026-08-15 23:55:52.870</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:52.870034" elapsed="0.000189"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:52.870696" level="INFO">${ellapsed_seconds} = 2637.467</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:52.870370" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.871059" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:52.870793" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.870774" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.869232" elapsed="0.001952"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.871708" level="INFO">${number} = 325</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.871329" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.873188" level="INFO">${number} = 325</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.872848" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.875209" level="INFO">${device-port} = 18154</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.874399" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.877964" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:52.912651" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.912912" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.877864" elapsed="0.035109"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:52.913897" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:52.914033" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:52.913156" elapsed="0.001115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:52.913107" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:52.877398" elapsed="0.037256">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:52.877011" elapsed="0.037784"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:52.915686" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18154 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:52.991039" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:52.991336" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:52.915198" elapsed="0.076196"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:52.991523" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:55:52.992016" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:52.876572" elapsed="0.115557"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:52.992758" elapsed="0.000984"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:52.875742" elapsed="0.118238"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:52.873944" elapsed="0.120231"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:52.873373" elapsed="0.120927"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.872354" elapsed="0.122079"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:52.871906" elapsed="0.122628"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.995767" level="INFO">${next} = 18155</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:52.994928" elapsed="0.000960"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:52.997177" level="INFO">${current_port} = 18155</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:52.996260" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.867875" elapsed="0.129529"/>
</kw>
<msg time="2026-08-15T23:55:52.997489" level="INFO">Repeating keyword, round 326/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:52.999896" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:52.999763" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:52.999742" elapsed="0.000219"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.000318" level="INFO">${current_Date} = 2026-08-15 23:55:53.000</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.000151" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.000835" level="INFO">${ellapsed_seconds} = 2637.337</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.000494" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.001177" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.000933" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.000914" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:52.999356" elapsed="0.001945"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.001833" level="INFO">${number} = 326</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.001447" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.003275" level="INFO">${number} = 326</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.002921" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.005242" level="INFO">${device-port} = 18155</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.004450" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.007980" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.040280" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.040506" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.007683" elapsed="0.032881"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.041491" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:53.041626" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.040729" elapsed="0.001002">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.040683" elapsed="0.001173">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.007406" elapsed="0.034731">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.007011" elapsed="0.035332"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.043403" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18155 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.108616" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.108874" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.042892" elapsed="0.066043"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.109048" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:53.109452" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.006563" elapsed="0.102998"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.110206" elapsed="0.000891"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.005762" elapsed="0.105525"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.004006" elapsed="0.107470"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.003460" elapsed="0.108116"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.002461" elapsed="0.109239"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.002014" elapsed="0.109783"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.112985" level="INFO">${next} = 18156</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.112187" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.114311" level="INFO">${current_port} = 18156</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.113401" elapsed="0.001006"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:52.997976" elapsed="0.116559"/>
</kw>
<msg time="2026-08-15T23:55:53.114620" level="INFO">Repeating keyword, round 327/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.117179" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.116903" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.116859" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.118181" level="INFO">${current_Date} = 2026-08-15 23:55:53.118</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.117781" elapsed="0.000461"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.118924" level="INFO">${ellapsed_seconds} = 2637.219</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.118584" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.119260" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.119023" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.119003" elapsed="0.000337"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.116344" elapsed="0.003041"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.119913" level="INFO">${number} = 327</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.119532" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.121349" level="INFO">${number} = 327</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.121007" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.123377" level="INFO">${device-port} = 18156</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.122571" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.125988" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.164665" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.164994" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.125884" elapsed="0.039175"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.166122" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:55:53.166266" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.165289" elapsed="0.001196">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.165233" elapsed="0.001374">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.125541" elapsed="0.041448">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.125147" elapsed="0.042043"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.168218" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18156 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.236492" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.236833" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.167588" elapsed="0.069326"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.237069" elapsed="0.000106"/>
</return>
<msg time="2026-08-15T23:55:53.237585" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.124715" elapsed="0.112983"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.238414" elapsed="0.001043"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.123926" elapsed="0.115728"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.122118" elapsed="0.117801"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.121540" elapsed="0.118497"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.120542" elapsed="0.119629"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.120096" elapsed="0.120202"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.241543" level="INFO">${next} = 18157</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.240664" elapsed="0.000941"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.243031" level="INFO">${current_port} = 18157</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.242050" elapsed="0.001082"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.115094" elapsed="0.128172"/>
</kw>
<msg time="2026-08-15T23:55:53.243354" level="INFO">Repeating keyword, round 328/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.246091" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.245831" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.245756" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.247071" level="INFO">${current_Date} = 2026-08-15 23:55:53.247</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.246668" elapsed="0.000465"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.248278" level="INFO">${ellapsed_seconds} = 2637.09</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.247469" elapsed="0.000875"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.248779" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.248502" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.248472" elapsed="0.000409"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.245227" elapsed="0.003700"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.249443" level="INFO">${number} = 328</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.249075" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.250900" level="INFO">${number} = 328</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.250539" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.252986" level="INFO">${device-port} = 18157</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.252145" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.255635" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.288099" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.288327" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.255531" elapsed="0.032855"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.289343" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:53.289486" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.288555" elapsed="0.001042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.288508" elapsed="0.001182">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.255249" elapsed="0.034762">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.254842" elapsed="0.035393"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.291109" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18157 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.356463" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.356729" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.290589" elapsed="0.066198"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.356992" elapsed="0.000090"/>
</return>
<msg time="2026-08-15T23:55:53.357449" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.254393" elapsed="0.103168"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.358266" elapsed="0.001038"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.253532" elapsed="0.105965"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.251634" elapsed="0.108056"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.251087" elapsed="0.108709"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.250092" elapsed="0.109910"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.249626" elapsed="0.110481"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.361311" level="INFO">${next} = 18158</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.360461" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.362689" level="INFO">${current_port} = 18158</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.361740" elapsed="0.001048"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.243867" elapsed="0.119159"/>
</kw>
<msg time="2026-08-15T23:55:53.363127" level="INFO">Repeating keyword, round 329/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.365706" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.365462" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.365418" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.366567" level="INFO">${current_Date} = 2026-08-15 23:55:53.366</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.366211" elapsed="0.000417"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.367694" level="INFO">${ellapsed_seconds} = 2636.971</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.367043" elapsed="0.000678"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.368062" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.367793" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.367773" elapsed="0.000368"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.364927" elapsed="0.003259"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.368695" level="INFO">${number} = 329</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.368331" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.370148" level="INFO">${number} = 329</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.369788" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.372188" level="INFO">${device-port} = 18158</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.371369" elapsed="0.000902"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.374819" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.408516" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.408772" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.374672" elapsed="0.034210"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.409878" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:53.410020" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.409082" elapsed="0.001159">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.409025" elapsed="0.001347">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.374393" elapsed="0.036287">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.373999" elapsed="0.036861"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.411729" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18158 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.480545" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.480763" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.411227" elapsed="0.069642"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.480990" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:53.481418" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.373556" elapsed="0.108008"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.482209" elapsed="0.000948"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.372717" elapsed="0.110632"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.370909" elapsed="0.112633"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.370333" elapsed="0.113310"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.369343" elapsed="0.114427"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.368893" elapsed="0.115046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.485130" level="INFO">${next} = 18159</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.484295" elapsed="0.000900"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.486546" level="INFO">${current_port} = 18159</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.485594" elapsed="0.001051"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.363589" elapsed="0.123186"/>
</kw>
<msg time="2026-08-15T23:55:53.486957" level="INFO">Repeating keyword, round 330/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.489679" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.489349" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.489306" elapsed="0.000551"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.490648" level="INFO">${current_Date} = 2026-08-15 23:55:53.491</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.490321" elapsed="0.000361"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.491176" level="INFO">${ellapsed_seconds} = 2636.846</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.490848" elapsed="0.000354"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.491527" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.491274" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.491255" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.488759" elapsed="0.002891"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.492179" level="INFO">${number} = 330</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.491795" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.493638" level="INFO">${number} = 330</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.493277" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.495669" level="INFO">${device-port} = 18159</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.494861" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.498324" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.536481" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.536705" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.498224" elapsed="0.038541"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.537905" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:53.538053" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.537035" elapsed="0.001127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.536973" elapsed="0.001282">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.497943" elapsed="0.040582">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.497510" elapsed="0.041228"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.539632" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18159 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.612912" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.613149" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.539145" elapsed="0.074061"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.613326" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:53.613748" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.497067" elapsed="0.116854"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.614527" elapsed="0.000958"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.496234" elapsed="0.119445"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.494374" elapsed="0.121562"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.493844" elapsed="0.122237"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.492825" elapsed="0.123385"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.492360" elapsed="0.123951"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.617497" level="INFO">${next} = 18160</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.616662" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.618986" level="INFO">${current_port} = 18160</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.617994" elapsed="0.001206"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.487429" elapsed="0.131918"/>
</kw>
<msg time="2026-08-15T23:55:53.619440" level="INFO">Repeating keyword, round 331/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.621274" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.621160" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.621138" elapsed="0.000202"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.621653" level="INFO">${current_Date} = 2026-08-15 23:55:53.622</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.621488" elapsed="0.000193"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.622175" level="INFO">${ellapsed_seconds} = 2636.715</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.621851" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.622518" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.622272" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.622253" elapsed="0.000343"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.620908" elapsed="0.001734"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.623172" level="INFO">${number} = 331</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.622788" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.624721" level="INFO">${number} = 331</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.624372" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.626759" level="INFO">${device-port} = 18160</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.625958" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.629566" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.668573" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.668834" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.629309" elapsed="0.039589"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.669770" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:55:53.669938" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.669067" elapsed="0.001095">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.669022" elapsed="0.001241">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.629032" elapsed="0.041513">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.628599" elapsed="0.042087"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.671608" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18160 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.740605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.740850" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.671065" elapsed="0.069843"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.741019" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:53.741414" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.628180" elapsed="0.113342"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.742114" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.627340" elapsed="0.115882"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.625458" elapsed="0.117949"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.624926" elapsed="0.118582"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.623915" elapsed="0.119715"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.623355" elapsed="0.120367"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.744900" level="INFO">${next} = 18161</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.744109" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.746208" level="INFO">${current_port} = 18161</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.745326" elapsed="0.000978"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.620010" elapsed="0.126424"/>
</kw>
<msg time="2026-08-15T23:55:53.746542" level="INFO">Repeating keyword, round 332/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.749071" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.748795" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.748752" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.749994" level="INFO">${current_Date} = 2026-08-15 23:55:53.750</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.749611" elapsed="0.000442"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.751148" level="INFO">${ellapsed_seconds} = 2636.587</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.750388" elapsed="0.000820"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.751738" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.751368" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.751327" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.748269" elapsed="0.003611"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.752389" level="INFO">${number} = 332</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.752027" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.753833" level="INFO">${number} = 332</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.753477" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.755789" level="INFO">${device-port} = 18161</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.755022" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.758463" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.792514" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.792899" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.758211" elapsed="0.034756"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.794130" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:55:53.794277" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.793200" elapsed="0.001190">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.793136" elapsed="0.001350">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.757934" elapsed="0.036851">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.757530" elapsed="0.037541"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.796156" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18161 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.865157" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.865524" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.795458" elapsed="0.070127"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.865757" elapsed="0.000169"/>
</return>
<msg time="2026-08-15T23:55:53.866349" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.757123" elapsed="0.109337"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:53.867180" elapsed="0.001018"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.756328" elapsed="0.112060"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.754552" elapsed="0.114030"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.754022" elapsed="0.114664"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.753031" elapsed="0.115825"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.752571" elapsed="0.116392"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.870197" level="INFO">${next} = 18162</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.869347" elapsed="0.000910"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.871563" level="INFO">${current_port} = 18162</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:53.870627" elapsed="0.001031"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.747018" elapsed="0.124772"/>
</kw>
<msg time="2026-08-15T23:55:53.871943" level="INFO">Repeating keyword, round 333/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:53.874140" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:53.874017" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.873992" elapsed="0.000215"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.874547" level="INFO">${current_Date} = 2026-08-15 23:55:53.874</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:53.874363" elapsed="0.000211"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:53.875091" level="INFO">${ellapsed_seconds} = 2636.463</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:53.874727" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.875454" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:53.875189" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:53.875170" elapsed="0.000364"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:53.873745" elapsed="0.001834"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.876109" level="INFO">${number} = 333</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.875725" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.877567" level="INFO">${number} = 333</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.877221" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:53.879542" level="INFO">${device-port} = 18162</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:53.878744" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.882296" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:53.916281" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.916506" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.882192" elapsed="0.034402"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:53.917565" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:53.917702" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:53.916769" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:53.916717" elapsed="0.001356">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:53.881714" elapsed="0.036668">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:53.881322" elapsed="0.037208"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:53.919421" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18162 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:53.998583" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:53.998857" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:53.918910" elapsed="0.080005"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:53.999035" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:53.999473" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:53.880893" elapsed="0.118699"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.000252" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:53.880088" elapsed="0.121292"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:53.878300" elapsed="0.123305"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:53.877752" elapsed="0.123955"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.876742" elapsed="0.125136"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:53.876294" elapsed="0.125685"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.003155" level="INFO">${next} = 18163</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.002325" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.004570" level="INFO">${current_port} = 18163</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.003606" elapsed="0.001063"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:53.872443" elapsed="0.132416"/>
</kw>
<msg time="2026-08-15T23:55:54.004957" level="INFO">Repeating keyword, round 334/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.007527" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.007278" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.007236" elapsed="0.000625"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.008642" level="INFO">${current_Date} = 2026-08-15 23:55:54.008</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.008296" elapsed="0.000379"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.009178" level="INFO">${ellapsed_seconds} = 2636.329</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.008852" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.009525" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.009276" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.009257" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.006706" elapsed="0.002943"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.010177" level="INFO">${number} = 334</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.009795" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.011690" level="INFO">${number} = 334</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.011283" elapsed="0.000434"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.013693" level="INFO">${device-port} = 18163</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.012910" elapsed="0.000864"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.016430" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.044498" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.044605" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.016332" elapsed="0.028300"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.045106" elapsed="0.000027"/>
</kw>
<msg time="2026-08-15T23:55:54.045170" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.044718" elapsed="0.000501">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.044694" elapsed="0.000567">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.016055" elapsed="0.029348">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.015452" elapsed="0.030067"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.045920" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18163 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.116411" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.116640" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.045679" elapsed="0.071018"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.116860" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:55:54.117277" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.015032" elapsed="0.102359"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.118007" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.014232" elapsed="0.104905"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.012433" elapsed="0.106900"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.011900" elapsed="0.107538"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.010834" elapsed="0.108732"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.010360" elapsed="0.109306"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.120867" level="INFO">${next} = 18164</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.120059" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.122191" level="INFO">${current_port} = 18164</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.121295" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.005391" elapsed="0.117028"/>
</kw>
<msg time="2026-08-15T23:55:54.122560" level="INFO">Repeating keyword, round 335/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.124531" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.124377" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.124351" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.125067" level="INFO">${current_Date} = 2026-08-15 23:55:54.125</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.124846" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.125740" level="INFO">${ellapsed_seconds} = 2636.212</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.125313" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.126231" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.125899" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.125872" elapsed="0.000469"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.124041" elapsed="0.002363"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.127167" level="INFO">${number} = 335</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.126627" elapsed="0.000577"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.129186" level="INFO">${number} = 335</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.128687" elapsed="0.000537"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.132075" level="INFO">${device-port} = 18164</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.130949" elapsed="0.001240"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.136015" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.172688" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.172993" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.135914" elapsed="0.037140"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.174090" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:54.174231" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.173243" elapsed="0.001210">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.173185" elapsed="0.001372">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.135422" elapsed="0.039459">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.134550" elapsed="0.040481"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.175917" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18164 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.244995" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.245421" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.175389" elapsed="0.070150"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.245733" elapsed="0.000183"/>
</return>
<msg time="2026-08-15T23:55:54.246376" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.133946" elapsed="0.112582"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.247279" elapsed="0.001058"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.132823" elapsed="0.115724"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.130270" elapsed="0.118495"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.129509" elapsed="0.119419"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.128064" elapsed="0.121001"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.127420" elapsed="0.121745"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.250443" level="INFO">${next} = 18165</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.249560" elapsed="0.000950"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.251933" level="INFO">${current_port} = 18165</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.250960" elapsed="0.001078"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.123052" elapsed="0.129125"/>
</kw>
<msg time="2026-08-15T23:55:54.252269" level="INFO">Repeating keyword, round 336/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.254338" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.254216" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.254193" elapsed="0.000214"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.254834" level="INFO">${current_Date} = 2026-08-15 23:55:54.255</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.254623" elapsed="0.000240"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.255371" level="INFO">${ellapsed_seconds} = 2636.082</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.255018" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.255745" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.255469" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.255451" elapsed="0.000400"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.253957" elapsed="0.001941"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.256417" level="INFO">${number} = 336</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.256047" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.257931" level="INFO">${number} = 336</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.257555" elapsed="0.000404"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.259967" level="INFO">${device-port} = 18165</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.259152" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.265499" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.296556" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.296849" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.265394" elapsed="0.031523"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.297913" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:54.298067" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.297091" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.297038" elapsed="0.001297">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.265095" elapsed="0.033597">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.261781" elapsed="0.037170"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.299912" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18165 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.368556" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.368793" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.299372" elapsed="0.069528"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.369020" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:54.369464" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.261363" elapsed="0.108216"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.370228" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.260513" elapsed="0.110868"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.258666" elapsed="0.112913"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.258122" elapsed="0.113559"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.257085" elapsed="0.114771"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.256601" elapsed="0.115390"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.373207" level="INFO">${next} = 18166</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.372367" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.374584" level="INFO">${current_port} = 18166</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.373645" elapsed="0.001040"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.252784" elapsed="0.122103"/>
</kw>
<msg time="2026-08-15T23:55:54.374983" level="INFO">Repeating keyword, round 337/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.377647" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.377391" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.377345" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.378550" level="INFO">${current_Date} = 2026-08-15 23:55:54.378</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.378166" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.379701" level="INFO">${ellapsed_seconds} = 2635.959</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.378982" elapsed="0.000781"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.380587" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.380012" elapsed="0.000648"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.379964" elapsed="0.000724"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.376831" elapsed="0.003904"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.381288" level="INFO">${number} = 337</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.380909" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.382758" level="INFO">${number} = 337</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.382411" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.384823" level="INFO">${device-port} = 18166</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.384001" elapsed="0.000909"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.387590" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.420628" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.420907" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.387487" elapsed="0.033488"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.421893" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:54.422041" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.421146" elapsed="0.001085">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.421097" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.387021" elapsed="0.035595">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.386600" elapsed="0.036161"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.423722" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18166 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.492444" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.492663" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.423166" elapsed="0.069553"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.492873" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:54.493315" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.386182" elapsed="0.107249"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.494047" elapsed="0.000983"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.385356" elapsed="0.109889"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.383511" elapsed="0.111938"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.382965" elapsed="0.112585"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.381955" elapsed="0.113687"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.381480" elapsed="0.114222"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.496446" level="INFO">${next} = 18167</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.495955" elapsed="0.000531"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.497297" level="INFO">${current_port} = 18167</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.496714" elapsed="0.000647"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.375440" elapsed="0.122005"/>
</kw>
<msg time="2026-08-15T23:55:54.497505" level="INFO">Repeating keyword, round 338/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.499145" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.498987" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.498960" elapsed="0.000277"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.499721" level="INFO">${current_Date} = 2026-08-15 23:55:54.500</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.499498" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.500444" level="INFO">${ellapsed_seconds} = 2635.837</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.499995" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.500943" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.500585" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.500558" elapsed="0.000502"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.498582" elapsed="0.002544"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.501892" level="INFO">${number} = 338</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.501342" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.504000" level="INFO">${number} = 338</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.503489" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.506948" level="INFO">${device-port} = 18167</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.505714" elapsed="0.001349"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.510016" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.544303" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.544543" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.509670" elapsed="0.034935"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.545581" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:54.545720" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.544778" elapsed="0.001081">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.544729" elapsed="0.001242">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.509384" elapsed="0.036905">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.508992" elapsed="0.037517"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.547406" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18167 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.616351" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.616593" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.546901" elapsed="0.069748"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.616768" elapsed="0.000136"/>
</return>
<msg time="2026-08-15T23:55:54.617276" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.508546" elapsed="0.108840"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.618076" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.507710" elapsed="0.111517"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.505057" elapsed="0.114366"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.504264" elapsed="0.115267"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.502846" elapsed="0.116815"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.502150" elapsed="0.117612"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.621025" level="INFO">${next} = 18168</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.620188" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.622434" level="INFO">${current_port} = 18168</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.621492" elapsed="0.001043"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.497768" elapsed="0.124901"/>
</kw>
<msg time="2026-08-15T23:55:54.622757" level="INFO">Repeating keyword, round 339/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.625512" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.625197" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.625140" elapsed="0.000525"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.626414" level="INFO">${current_Date} = 2026-08-15 23:55:54.626</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.626035" elapsed="0.000449"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.627068" level="INFO">${ellapsed_seconds} = 2635.711</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.626723" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.627428" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.627169" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.627149" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.624599" elapsed="0.002959"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.628100" level="INFO">${number} = 339</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.627706" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.629611" level="INFO">${number} = 339</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.629244" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.631685" level="INFO">${device-port} = 18168</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.630861" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.634369" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.672630" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.673026" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.634257" elapsed="0.038852"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.674163" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:54.674317" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.673298" elapsed="0.001227">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.673243" elapsed="0.001387">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.633971" elapsed="0.041056">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.633538" elapsed="0.041666"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.676217" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18168 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.744420" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.744640" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.675570" elapsed="0.069126"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.744855" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:55:54.745316" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.633091" elapsed="0.112343"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.746119" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.632247" elapsed="0.115001"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.630368" elapsed="0.117074"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.629822" elapsed="0.117727"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.628758" elapsed="0.118918"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.628295" elapsed="0.119479"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.749127" level="INFO">${next} = 18169</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.748276" elapsed="0.000915"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.750651" level="INFO">${current_port} = 18169</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.749567" elapsed="0.001184"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.623287" elapsed="0.127662"/>
</kw>
<msg time="2026-08-15T23:55:54.751036" level="INFO">Repeating keyword, round 340/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.753499" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.753347" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.753320" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.754089" level="INFO">${current_Date} = 2026-08-15 23:55:54.754</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.753866" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.754759" level="INFO">${ellapsed_seconds} = 2635.583</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.754335" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.755310" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.754919" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.754892" elapsed="0.000530"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.752917" elapsed="0.002570"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.756264" level="INFO">${number} = 340</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.755692" elapsed="0.000609"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.758459" level="INFO">${number} = 340</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.757828" elapsed="0.000669"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.761658" level="INFO">${device-port} = 18169</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.760514" elapsed="0.001259"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.765414" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.796347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.796579" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.765271" elapsed="0.031367"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.797569" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:54.797706" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.796853" elapsed="0.000993">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.796761" elapsed="0.001187">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.764773" elapsed="0.033454">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.764213" elapsed="0.034231"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.799325" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18169 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:54.872118" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.872333" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.798797" elapsed="0.073591"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:54.872521" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:54.872990" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.763579" elapsed="0.109521"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:54.873690" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.762443" elapsed="0.112411"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.759840" elapsed="0.115269"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.758721" elapsed="0.116493"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.757182" elapsed="0.118159"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.756524" elapsed="0.118914"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.876650" level="INFO">${next} = 18170</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.875840" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.878095" level="INFO">${current_port} = 18170</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:54.877133" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.751462" elapsed="0.126869"/>
</kw>
<msg time="2026-08-15T23:55:54.878418" level="INFO">Repeating keyword, round 341/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:54.881117" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:54.880857" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.880777" elapsed="0.000485"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.882036" level="INFO">${current_Date} = 2026-08-15 23:55:54.882</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:54.881615" elapsed="0.000484"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:54.883254" level="INFO">${ellapsed_seconds} = 2635.455</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:54.882437" elapsed="0.000877"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.883851" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:54.883479" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:54.883431" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:54.880250" elapsed="0.003729"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.884496" level="INFO">${number} = 341</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.884127" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.885986" level="INFO">${number} = 341</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.885616" elapsed="0.000398"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:54.888053" level="INFO">${device-port} = 18170</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:54.887224" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.890645" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:54.924043" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:54.924288" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.890545" elapsed="0.033805"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:54.925300" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:54.925443" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:54.924521" elapsed="0.001110">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:54.924474" elapsed="0.001261">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:54.890262" elapsed="0.035784">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:54.889864" elapsed="0.036342"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:54.927125" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18170 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.002445" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.002699" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:54.926591" elapsed="0.076168"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.002948" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:55:55.003531" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:54.889417" elapsed="0.114227"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.004358" elapsed="0.000960"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:54.888581" elapsed="0.116935"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:54.886712" elapsed="0.119001"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:54.886174" elapsed="0.119745"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.885160" elapsed="0.120889"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:54.884678" elapsed="0.121467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.007285" level="INFO">${next} = 18171</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.006489" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.008614" level="INFO">${current_port} = 18171</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.007708" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:54.878927" elapsed="0.129976"/>
</kw>
<msg time="2026-08-15T23:55:55.008993" level="INFO">Repeating keyword, round 342/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.011073" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.010960" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.010939" elapsed="0.000198"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.011489" level="INFO">${current_Date} = 2026-08-15 23:55:55.011</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.011325" elapsed="0.000191"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.012006" level="INFO">${ellapsed_seconds} = 2635.326</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.011667" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.012347" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.012105" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.012086" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.010698" elapsed="0.001776"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.013018" level="INFO">${number} = 342</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.012625" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.014475" level="INFO">${number} = 342</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.014132" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.016466" level="INFO">${device-port} = 18171</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.015659" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.019042" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.056352" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.056584" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.018941" elapsed="0.037703"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.057592" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:55.057730" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.056854" elapsed="0.001013">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.056765" elapsed="0.001198">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.018637" elapsed="0.039607">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.018248" elapsed="0.040213"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.059334" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18171 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.124320" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.124538" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.058845" elapsed="0.065749"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.124728" elapsed="0.000118"/>
</return>
<msg time="2026-08-15T23:55:55.125183" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.017831" elapsed="0.107462"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.125893" elapsed="0.000843"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.017005" elapsed="0.109967"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.015210" elapsed="0.111957"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.014662" elapsed="0.112606"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.013645" elapsed="0.113748"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.013200" elapsed="0.114291"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.128620" level="INFO">${next} = 18172</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.127879" elapsed="0.000820"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.130011" level="INFO">${current_port} = 18172</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.129119" elapsed="0.000989"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.009427" elapsed="0.120811"/>
</kw>
<msg time="2026-08-15T23:55:55.130326" level="INFO">Repeating keyword, round 343/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.132937" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.132634" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.132550" elapsed="0.000533"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.133693" level="INFO">${current_Date} = 2026-08-15 23:55:55.134</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.133409" elapsed="0.000312"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.134195" level="INFO">${ellapsed_seconds} = 2635.203</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.133885" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.134529" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.134292" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.134274" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.132063" elapsed="0.002590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.135179" level="INFO">${number} = 343</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.134812" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.136617" level="INFO">${number} = 343</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.136268" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.138640" level="INFO">${device-port} = 18172</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.137849" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.141526" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.176309" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.176537" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.141272" elapsed="0.035325"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.177529" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:55.177663" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.176767" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.176720" elapsed="0.001262">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.140990" elapsed="0.037265">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.140411" elapsed="0.037984"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.179260" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18172 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.244257" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.244487" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.178739" elapsed="0.065806"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.244660" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:55.245115" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.140000" elapsed="0.105229"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.245794" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.139178" elapsed="0.107758"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.137369" elapsed="0.109759"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.136824" elapsed="0.110406"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.135818" elapsed="0.111536"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.135361" elapsed="0.112088"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.248629" level="INFO">${next} = 18173</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.247870" elapsed="0.000819"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.249991" level="INFO">${current_port} = 18173</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.249106" elapsed="0.000982"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.130745" elapsed="0.119471"/>
</kw>
<msg time="2026-08-15T23:55:55.250306" level="INFO">Repeating keyword, round 344/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.252882" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.252603" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.252560" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.253773" level="INFO">${current_Date} = 2026-08-15 23:55:55.254</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.253425" elapsed="0.000438"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.254912" level="INFO">${ellapsed_seconds} = 2635.083</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.254203" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.255704" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.255133" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.255093" elapsed="0.000826"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.252072" elapsed="0.003951"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.256856" level="INFO">${number} = 344</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.256352" elapsed="0.000531"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.258290" level="INFO">${number} = 344</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.257948" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.260296" level="INFO">${device-port} = 18173</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.259480" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.262995" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.296614" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.296879" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.262717" elapsed="0.034225"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.297856" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:55.297996" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.297114" elapsed="0.000988">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.297063" elapsed="0.001131">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.262443" elapsed="0.036023">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.262057" elapsed="0.036615"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.299564" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18173 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.368594" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.368847" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.299055" elapsed="0.069852"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.369021" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:55.369424" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.261625" elapsed="0.107907"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.370142" elapsed="0.000997"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.260844" elapsed="0.110486"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.259019" elapsed="0.112497"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.258474" elapsed="0.113143"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.257486" elapsed="0.114255"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.257039" elapsed="0.114849"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.373041" level="INFO">${next} = 18174</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.372241" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.374378" level="INFO">${current_port} = 18174</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.373475" elapsed="0.001017"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.250738" elapsed="0.123884"/>
</kw>
<msg time="2026-08-15T23:55:55.374711" level="INFO">Repeating keyword, round 345/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.377296" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.377048" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.377003" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.378150" level="INFO">${current_Date} = 2026-08-15 23:55:55.378</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.377767" elapsed="0.000442"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.379314" level="INFO">${ellapsed_seconds} = 2634.959</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.378587" elapsed="0.000785"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.379882" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.379527" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.379488" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.376484" elapsed="0.003572"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.380839" level="INFO">${number} = 345</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.380262" elapsed="0.000616"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.382896" level="INFO">${number} = 345</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.382362" elapsed="0.000574"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.385697" level="INFO">${device-port} = 18174</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.384579" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.389534" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.420593" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.420900" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.389392" elapsed="0.031590"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.422002" elapsed="0.000116"/>
</kw>
<msg time="2026-08-15T23:55:55.422203" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.421158" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.421109" elapsed="0.001392">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.388752" elapsed="0.034107">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.388209" elapsed="0.034859"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.424047" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18174 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.488489" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.488707" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.423428" elapsed="0.065334"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.488916" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:55:55.489356" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.387610" elapsed="0.101885"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.490130" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.386472" elapsed="0.104770"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.383917" elapsed="0.107518"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.383158" elapsed="0.108380"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.381719" elapsed="0.109945"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.381097" elapsed="0.110663"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.493021" level="INFO">${next} = 18175</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.492182" elapsed="0.000914"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.494441" level="INFO">${current_port} = 18175</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.493485" elapsed="0.001070"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.375208" elapsed="0.119489"/>
</kw>
<msg time="2026-08-15T23:55:55.494785" level="INFO">Repeating keyword, round 346/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.497521" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.497203" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.497148" elapsed="0.000519"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.498523" level="INFO">${current_Date} = 2026-08-15 23:55:55.498</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.498159" elapsed="0.000392"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.499028" level="INFO">${ellapsed_seconds} = 2634.839</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.498702" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.499371" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.499126" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.499108" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.496607" elapsed="0.002895"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.500037" level="INFO">${number} = 346</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.499651" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.501635" level="INFO">${number} = 346</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.501205" elapsed="0.000458"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.503735" level="INFO">${device-port} = 18175</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.502917" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.506616" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.540006" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.540268" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.506515" elapsed="0.033827"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.541413" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:55:55.541562" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.540513" elapsed="0.001157">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.540464" elapsed="0.001383">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.506206" elapsed="0.035947">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.505591" elapsed="0.036927"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.543545" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18175 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.608611" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.608896" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.542970" elapsed="0.066017"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.609116" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:55:55.609588" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.505127" elapsed="0.104581"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.610370" elapsed="0.001090"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.504276" elapsed="0.107384"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.502400" elapsed="0.109497"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.501846" elapsed="0.110159"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.500683" elapsed="0.111448"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.500219" elapsed="0.112011"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.613423" level="INFO">${next} = 18176</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.612617" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.614749" level="INFO">${current_port} = 18176</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.613888" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.495302" elapsed="0.119739"/>
</kw>
<msg time="2026-08-15T23:55:55.615129" level="INFO">Repeating keyword, round 347/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.617705" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.617434" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.617392" elapsed="0.000494"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.618560" level="INFO">${current_Date} = 2026-08-15 23:55:55.618</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.618216" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.619669" level="INFO">${ellapsed_seconds} = 2634.719</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.618982" elapsed="0.000745"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.620552" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.619916" elapsed="0.000750"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.619872" elapsed="0.000826"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.616902" elapsed="0.003845"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.621284" level="INFO">${number} = 347</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.620916" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.622719" level="INFO">${number} = 347</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.622376" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.624718" level="INFO">${device-port} = 18176</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.623930" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.627446" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.656052" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.656294" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.627349" elapsed="0.029008"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.657351" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:55.657491" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.656552" elapsed="0.001132">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.656497" elapsed="0.001287">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.627069" elapsed="0.031038">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.626473" elapsed="0.031778"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.659141" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18176 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.734144" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.734373" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.658606" elapsed="0.075822"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.734546" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:55.735005" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.626063" elapsed="0.109054"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.735724" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.625257" elapsed="0.111636"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.623460" elapsed="0.113671"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.622932" elapsed="0.114388"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.621929" elapsed="0.115620"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.621465" elapsed="0.116261"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.739406" level="INFO">${next} = 18177</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.738277" elapsed="0.001214"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.740988" level="INFO">${current_port} = 18177</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.739969" elapsed="0.001128"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.615566" elapsed="0.125668"/>
</kw>
<msg time="2026-08-15T23:55:55.741366" level="INFO">Repeating keyword, round 348/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.743936" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.743773" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.743752" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.744402" level="INFO">${current_Date} = 2026-08-15 23:55:55.744</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.744233" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.744922" level="INFO">${ellapsed_seconds} = 2634.593</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.744582" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.745267" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.745020" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.745001" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.743298" elapsed="0.002094"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.745928" level="INFO">${number} = 348</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.745540" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.747458" level="INFO">${number} = 348</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.747037" elapsed="0.000448"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.750080" level="INFO">${device-port} = 18177</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.749086" elapsed="0.001116"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.756154" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.779679" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.779945" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.756048" elapsed="0.023957"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.780927" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:55.781068" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.780174" elapsed="0.001001">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.780125" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.755632" elapsed="0.025930">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.752171" elapsed="0.029676"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.782680" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18177 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.847862" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.848103" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.782204" elapsed="0.065956"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.848275" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:55.848711" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.751717" elapsed="0.097147"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.849445" elapsed="0.000933"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.750739" elapsed="0.099833"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.748477" elapsed="0.102292"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.747673" elapsed="0.103247"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.746569" elapsed="0.104480"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.746111" elapsed="0.105033"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.852284" level="INFO">${next} = 18178</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.851490" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.853745" level="INFO">${current_port} = 18178</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.852736" elapsed="0.001189"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.741895" elapsed="0.112179"/>
</kw>
<msg time="2026-08-15T23:55:55.854162" level="INFO">Repeating keyword, round 349/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.856738" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.856476" elapsed="0.000393"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.856420" elapsed="0.000500"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.857601" level="INFO">${current_Date} = 2026-08-15 23:55:55.857</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.857247" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.858757" level="INFO">${ellapsed_seconds} = 2634.48</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.858025" elapsed="0.000759"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.859130" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.858879" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.858859" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.855935" elapsed="0.003319"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.859764" level="INFO">${number} = 349</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.859398" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.861216" level="INFO">${number} = 349</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.860875" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.863238" level="INFO">${device-port} = 18178</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.862431" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.865977" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:55.900308" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.900596" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.865878" elapsed="0.034779"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.901752" elapsed="0.000132"/>
</kw>
<msg time="2026-08-15T23:55:55.901980" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:55.900938" elapsed="0.001301">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:55.900855" elapsed="0.001493">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.865401" elapsed="0.037249">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.865011" elapsed="0.037831"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.903760" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18178 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:55.968910" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:55.969147" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.903245" elapsed="0.065957"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:55.969363" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:55:55.969879" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.864579" elapsed="0.105420"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:55.970594" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.863767" elapsed="0.108019"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.861946" elapsed="0.110116"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.861400" elapsed="0.110775"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.860411" elapsed="0.111911"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.859961" elapsed="0.112474"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.973771" level="INFO">${next} = 18179</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.972890" elapsed="0.000991"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.975203" level="INFO">${current_port} = 18179</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:55.974257" elapsed="0.001046"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.854625" elapsed="0.120808"/>
</kw>
<msg time="2026-08-15T23:55:55.975520" level="INFO">Repeating keyword, round 350/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:55.977956" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:55.977838" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.977816" elapsed="0.000206"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.978403" level="INFO">${current_Date} = 2026-08-15 23:55:55.978</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:55.978222" elapsed="0.000207"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:55.978935" level="INFO">${ellapsed_seconds} = 2634.359</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:55.978583" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:55.979290" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:55.979033" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:55.979014" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:55.977464" elapsed="0.001952"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.979980" level="INFO">${number} = 350</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.979569" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.981476" level="INFO">${number} = 350</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.981105" elapsed="0.000398"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:55.983525" level="INFO">${device-port} = 18179</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:55.982702" elapsed="0.000908"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:55.986400" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.016381" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.016631" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:55.986108" elapsed="0.030584"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.017697" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:56.017871" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.016940" elapsed="0.001041">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.016857" elapsed="0.001220">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:55.985787" elapsed="0.032576">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:55.985384" elapsed="0.033192"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.019493" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18179 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.084905" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.085141" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.018967" elapsed="0.066236"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.085315" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:56.085728" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:55.984952" elapsed="0.100935"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.086477" elapsed="0.000915"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:55.984080" elapsed="0.103508"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:55.982225" elapsed="0.105558"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:55.981666" elapsed="0.106270"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.980635" elapsed="0.107428"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:55.980165" elapsed="0.108003"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.089388" level="INFO">${next} = 18180</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.088563" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.090870" level="INFO">${current_port} = 18180</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.089854" elapsed="0.001140"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:55.976021" elapsed="0.115108"/>
</kw>
<msg time="2026-08-15T23:55:56.091217" level="INFO">Repeating keyword, round 351/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.093897" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.093612" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.093568" elapsed="0.000478"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.094749" level="INFO">${current_Date} = 2026-08-15 23:55:56.095</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.094389" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.095944" level="INFO">${ellapsed_seconds} = 2634.242</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.095183" elapsed="0.000822"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.096639" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.096167" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.096124" elapsed="0.000598"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.093046" elapsed="0.003723"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.097309" level="INFO">${number} = 351</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.096938" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.098842" level="INFO">${number} = 351</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.098444" elapsed="0.000426"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.100961" level="INFO">${device-port} = 18180</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.100070" elapsed="0.000976"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.103662" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.140368" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.140477" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.103532" elapsed="0.036982"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.141516" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:56.141656" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.140688" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.140639" elapsed="0.001373">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.103233" elapsed="0.039061">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.102784" elapsed="0.039655"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.143390" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18180 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.212529" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.212744" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.142794" elapsed="0.070043"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.212954" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:55:56.213367" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.102361" elapsed="0.111116"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.214090" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.101519" elapsed="0.113646"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.099576" elapsed="0.115808"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.099032" elapsed="0.116456"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.097982" elapsed="0.117633"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.097503" elapsed="0.118206"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.217013" level="INFO">${next} = 18181</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.216102" elapsed="0.000972"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.218312" level="INFO">${current_port} = 18181</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.217430" elapsed="0.000978"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.091695" elapsed="0.126841"/>
</kw>
<msg time="2026-08-15T23:55:56.218620" level="INFO">Repeating keyword, round 352/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.221241" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.220978" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.220925" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.222168" level="INFO">${current_Date} = 2026-08-15 23:55:56.222</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.221785" elapsed="0.000444"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.223349" level="INFO">${ellapsed_seconds} = 2634.115</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.222564" elapsed="0.000848"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.223777" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.223538" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.223519" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.220368" elapsed="0.003553"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.224435" level="INFO">${number} = 352</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.224069" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.225890" level="INFO">${number} = 352</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.225532" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.227883" level="INFO">${device-port} = 18181</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.227077" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.230428" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.267838" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.268070" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.230329" elapsed="0.037800"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.269037" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:56.269175" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.268296" elapsed="0.000985">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.268249" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.230049" elapsed="0.039598">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.229634" elapsed="0.040253"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.270778" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18181 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.337334" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.337574" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.270259" elapsed="0.067373"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.337752" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:55:56.338208" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.229215" elapsed="0.109103"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.338975" elapsed="0.000913"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.228402" elapsed="0.111679"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.226604" elapsed="0.113663"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.226077" elapsed="0.114291"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.225082" elapsed="0.115411"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.224616" elapsed="0.115972"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.341734" level="INFO">${next} = 18182</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.340977" elapsed="0.000816"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.343135" level="INFO">${current_port} = 18182</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.342204" elapsed="0.001029"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.219100" elapsed="0.124261"/>
</kw>
<msg time="2026-08-15T23:55:56.343446" level="INFO">Repeating keyword, round 353/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.346023" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.345749" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.345704" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.347016" level="INFO">${current_Date} = 2026-08-15 23:55:56.347</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.346522" elapsed="0.000560"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.347931" level="INFO">${ellapsed_seconds} = 2633.99</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.347424" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.348432" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.348077" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.348048" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.345217" elapsed="0.003402"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.349402" level="INFO">${number} = 353</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.348856" elapsed="0.000586"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.351600" level="INFO">${number} = 353</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.351096" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.355232" level="INFO">${device-port} = 18182</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.353407" elapsed="0.002009"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.360318" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.388131" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.388354" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.360217" elapsed="0.028196"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.389322" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:56.389454" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.388578" elapsed="0.001105">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.388531" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.359938" elapsed="0.030176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.359428" elapsed="0.030829"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.391189" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18182 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.456136" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.456352" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.390608" elapsed="0.065800"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.456519" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:56.456974" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.358241" elapsed="0.098845"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.457692" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.356430" elapsed="0.102411"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.352707" elapsed="0.106335"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.351895" elapsed="0.107248"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.350397" elapsed="0.108870"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.349673" elapsed="0.109687"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.460523" level="INFO">${next} = 18183</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.459704" elapsed="0.000882"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.461929" level="INFO">${current_port} = 18183</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.460992" elapsed="0.001036"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.343935" elapsed="0.118220"/>
</kw>
<msg time="2026-08-15T23:55:56.462239" level="INFO">Repeating keyword, round 354/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.464951" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.464668" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.464622" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.465764" level="INFO">${current_Date} = 2026-08-15 23:55:56.466</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.465527" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.466268" level="INFO">${ellapsed_seconds} = 2633.871</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.465961" elapsed="0.000334"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.466609" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.466365" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.466347" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.463992" elapsed="0.002742"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.467269" level="INFO">${number} = 354</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.466896" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.468701" level="INFO">${number} = 354</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.468360" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.470735" level="INFO">${device-port} = 18183</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.469924" elapsed="0.000909"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.473290" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.504179" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.504409" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.473190" elapsed="0.031277"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.505461" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:56.505598" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.504665" elapsed="0.001039">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.504587" elapsed="0.001243">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.472911" elapsed="0.033198">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.472498" elapsed="0.033905"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.507312" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18183 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.571941" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.572157" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.506766" elapsed="0.065447"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.572326" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:55:56.572831" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.472090" elapsed="0.100860"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.573510" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.471288" elapsed="0.103310"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.469444" elapsed="0.105407"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.468905" elapsed="0.106054"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.467914" elapsed="0.107170"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.467450" elapsed="0.107730"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.576352" level="INFO">${next} = 18184</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.575534" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.577692" level="INFO">${current_port} = 18184</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.576870" elapsed="0.000882"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.462658" elapsed="0.115218"/>
</kw>
<msg time="2026-08-15T23:55:56.577933" level="INFO">Repeating keyword, round 355/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.579470" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.579318" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.579291" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.579997" level="INFO">${current_Date} = 2026-08-15 23:55:56.580</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.579762" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.580686" level="INFO">${ellapsed_seconds} = 2633.757</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.580241" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.581181" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.580854" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.580825" elapsed="0.000466"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.578985" elapsed="0.002369"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.582132" level="INFO">${number} = 355</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.581577" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.584202" level="INFO">${number} = 355</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.583709" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.587010" level="INFO">${device-port} = 18184</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.585887" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.590535" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.624564" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.624850" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.590287" elapsed="0.034626"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.625793" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:55:56.625960" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.625084" elapsed="0.001062">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.625036" elapsed="0.001209">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.590009" elapsed="0.036507">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.589483" elapsed="0.037174"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.627522" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18184 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.692347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.692575" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.627038" elapsed="0.065601"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.692761" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:55:56.693207" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.588910" elapsed="0.104408"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.693955" elapsed="0.000838"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.587729" elapsed="0.107301"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.585237" elapsed="0.109984"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.584458" elapsed="0.110864"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.583089" elapsed="0.112354"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.582386" elapsed="0.113153"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.696748" level="INFO">${next} = 18185</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.695970" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.698098" level="INFO">${current_port} = 18185</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.697219" elapsed="0.000976"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.578198" elapsed="0.120125"/>
</kw>
<msg time="2026-08-15T23:55:56.698407" level="INFO">Repeating keyword, round 356/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.700963" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.700690" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.700647" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.701871" level="INFO">${current_Date} = 2026-08-15 23:55:56.702</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.701498" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.702968" level="INFO">${ellapsed_seconds} = 2633.635</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.702264" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.703838" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.703191" elapsed="0.000784"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.703150" elapsed="0.000880"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.700158" elapsed="0.003974"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.704966" level="INFO">${number} = 356</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.704459" elapsed="0.000534"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.706400" level="INFO">${number} = 356</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.706059" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.708444" level="INFO">${device-port} = 18185</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.707620" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.711180" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.748221" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.748445" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.710929" elapsed="0.037575"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.749424" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:56.749558" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.748676" elapsed="0.000988">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.748626" elapsed="0.001131">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.710626" elapsed="0.039437">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.710231" elapsed="0.040051"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.751146" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18185 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.816103" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.816315" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.750632" elapsed="0.065737"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.816482" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:56.816932" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.709793" elapsed="0.107251"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.817600" elapsed="0.000876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.708996" elapsed="0.109694"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.707142" elapsed="0.111791"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.706585" elapsed="0.112451"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.705598" elapsed="0.113560"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.705152" elapsed="0.114103"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.820420" level="INFO">${next} = 18186</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.819621" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.821761" level="INFO">${current_port} = 18186</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.820922" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.698877" elapsed="0.123174"/>
</kw>
<msg time="2026-08-15T23:55:56.822137" level="INFO">Repeating keyword, round 357/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.824705" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.824433" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.824391" elapsed="0.000491"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.825550" level="INFO">${current_Date} = 2026-08-15 23:55:56.825</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.825204" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.826731" level="INFO">${ellapsed_seconds} = 2633.512</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.825998" elapsed="0.000821"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.827519" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.826986" elapsed="0.000659"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.826943" elapsed="0.000732"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.823902" elapsed="0.003828"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.828253" level="INFO">${number} = 357</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.827891" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.829672" level="INFO">${number} = 357</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.829338" elapsed="0.000361"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.831654" level="INFO">${device-port} = 18186</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.830879" elapsed="0.000856"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.834306" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.868382" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.868602" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.834208" elapsed="0.034453"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.869566" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:55:56.869698" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.868864" elapsed="0.001049">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.868781" elapsed="0.001232">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.833766" elapsed="0.036533">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.833384" elapsed="0.037085"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.871339" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18186 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:56.940602" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.941094" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.870848" elapsed="0.070312"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:56.941346" elapsed="0.000131"/>
</return>
<msg time="2026-08-15T23:55:56.942022" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.832979" elapsed="0.109169"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:56.942950" elapsed="0.001159"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.832183" elapsed="0.112159"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.830392" elapsed="0.114165"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.829872" elapsed="0.114797"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.828893" elapsed="0.115957"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.828435" elapsed="0.116553"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.946302" level="INFO">${next} = 18187</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.945364" elapsed="0.001004"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.947731" level="INFO">${current_port} = 18187</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:56.946752" elapsed="0.001151"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.822555" elapsed="0.125509"/>
</kw>
<msg time="2026-08-15T23:55:56.948158" level="INFO">Repeating keyword, round 358/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:56.950904" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:56.950691" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.950659" elapsed="0.000344"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.951552" level="INFO">${current_Date} = 2026-08-15 23:55:56.951</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:56.951296" elapsed="0.000295"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:56.952339" level="INFO">${ellapsed_seconds} = 2633.386</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:56.951830" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.952888" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:56.952481" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:56.952454" elapsed="0.000564"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:56.950210" elapsed="0.002885"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.953928" level="INFO">${number} = 358</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.953307" elapsed="0.000662"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.956080" level="INFO">${number} = 358</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.955544" elapsed="0.000575"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:56.959034" level="INFO">${device-port} = 18187</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:56.957852" elapsed="0.001298"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.963145" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:56.992086" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:56.992317" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.963035" elapsed="0.029343"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:56.993353" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:55:56.993527" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:56.992549" elapsed="0.001091">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:56.992501" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:56.962684" elapsed="0.031414">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:56.961709" elapsed="0.032660"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:56.995355" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18187 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.060262" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.060475" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:56.994738" elapsed="0.065793"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.060644" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:57.061124" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:56.961015" elapsed="0.100222"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.061793" elapsed="0.000889"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:56.959788" elapsed="0.103120"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:56.957159" elapsed="0.105942"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:56.956350" elapsed="0.106851"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.954905" elapsed="0.108418"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:56.954205" elapsed="0.109213"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.064566" level="INFO">${next} = 18188</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.063763" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.066054" level="INFO">${current_port} = 18188</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.065083" elapsed="0.001074"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:56.948677" elapsed="0.117611"/>
</kw>
<msg time="2026-08-15T23:55:57.066400" level="INFO">Repeating keyword, round 359/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.069174" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.068912" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.068796" elapsed="0.000522"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.069780" level="INFO">${current_Date} = 2026-08-15 23:55:57.070</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.069613" elapsed="0.000208"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.070282" level="INFO">${ellapsed_seconds} = 2633.267</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.069972" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.070684" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.070378" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.070360" elapsed="0.000404"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.068274" elapsed="0.002550"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.071338" level="INFO">${number} = 359</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.070972" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.072770" level="INFO">${number} = 359</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.072430" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.074763" level="INFO">${device-port} = 18188</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.073981" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.077491" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.112379" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.112646" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.077395" elapsed="0.035320"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.113662" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:57.113797" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.112944" elapsed="0.001092">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.112889" elapsed="0.001248">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.077118" elapsed="0.037292">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.076526" elapsed="0.038024"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.115448" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18188 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.180536" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.180873" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.114949" elapsed="0.066012"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.181127" elapsed="0.000106"/>
</return>
<msg time="2026-08-15T23:55:57.181664" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.076109" elapsed="0.105742"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.182620" elapsed="0.001145"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.075302" elapsed="0.108803"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.073512" elapsed="0.110845"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.072994" elapsed="0.111482"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.071986" elapsed="0.112630"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.071521" elapsed="0.113205"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.186101" level="INFO">${next} = 18189</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.185172" elapsed="0.000999"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.187617" level="INFO">${current_port} = 18189</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.186571" elapsed="0.001164"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.066907" elapsed="0.121041"/>
</kw>
<msg time="2026-08-15T23:55:57.188101" level="INFO">Repeating keyword, round 360/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.190075" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.189892" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.189853" elapsed="0.000319"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.190694" level="INFO">${current_Date} = 2026-08-15 23:55:57.191</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.190452" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.191443" level="INFO">${ellapsed_seconds} = 2633.146</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.190981" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.192019" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.191590" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.191561" elapsed="0.000586"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.189491" elapsed="0.002728"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.193097" level="INFO">${number} = 360</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.192473" elapsed="0.000673"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.195471" level="INFO">${number} = 360</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.194919" elapsed="0.000600"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.198601" level="INFO">${device-port} = 18189</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.197382" elapsed="0.001346"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.205507" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.232453" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.232728" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.205391" elapsed="0.027399"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.233887" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:55:57.234036" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.233038" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.232972" elapsed="0.001298">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.205085" elapsed="0.029489">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.201135" elapsed="0.033722"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.235824" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18189 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.303890" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.304040" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.235248" elapsed="0.068828"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.304156" elapsed="0.000056"/>
</return>
<msg time="2026-08-15T23:55:57.304452" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.200672" elapsed="0.103851"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.304947" elapsed="0.000634"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.199451" elapsed="0.106256"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.196648" elapsed="0.109226"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.195772" elapsed="0.110178"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.194154" elapsed="0.111883"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.193396" elapsed="0.112709"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.306901" level="INFO">${next} = 18190</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.306337" elapsed="0.000606"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.307850" level="INFO">${current_port} = 18190</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.307190" elapsed="0.000735"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.188591" elapsed="0.119422"/>
</kw>
<msg time="2026-08-15T23:55:57.308073" level="INFO">Repeating keyword, round 361/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.309863" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.309648" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.309619" elapsed="0.000349"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.310438" level="INFO">${current_Date} = 2026-08-15 23:55:57.310</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.310190" elapsed="0.000288"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.311218" level="INFO">${ellapsed_seconds} = 2633.027</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.310696" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.311737" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.311362" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.311334" elapsed="0.000543"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.309295" elapsed="0.002649"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.312734" level="INFO">${number} = 361</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.312192" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.314933" level="INFO">${number} = 361</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.314406" elapsed="0.000567"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.317272" level="INFO">${device-port} = 18190</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.316377" elapsed="0.000988"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.320146" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.355923" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.356163" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.320045" elapsed="0.036176"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.357187" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:57.357326" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.356402" elapsed="0.001184">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.356349" elapsed="0.001343">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.319552" elapsed="0.038464">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.319150" elapsed="0.039056"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.359105" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18190 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.424026" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.424235" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.358560" elapsed="0.065730"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.424400" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:57.424843" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.318667" elapsed="0.106294"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.425518" elapsed="0.000933"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.317851" elapsed="0.108791"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.315919" elapsed="0.110949"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.315242" elapsed="0.111730"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.313718" elapsed="0.113379"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.313046" elapsed="0.114146"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.428318" level="INFO">${next} = 18191</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.427531" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.429629" level="INFO">${current_port} = 18191</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.428738" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.308374" elapsed="0.121545"/>
</kw>
<msg time="2026-08-15T23:55:57.430010" level="INFO">Repeating keyword, round 362/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.432688" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.432444" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.432402" elapsed="0.000459"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.433602" level="INFO">${current_Date} = 2026-08-15 23:55:57.433</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.433253" elapsed="0.000408"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.434766" level="INFO">${ellapsed_seconds} = 2632.904</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.434024" elapsed="0.000832"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.435550" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.435016" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.434974" elapsed="0.000660"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.431923" elapsed="0.003756"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.436206" level="INFO">${number} = 362</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.435839" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.437645" level="INFO">${number} = 362</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.437303" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.439651" level="INFO">${device-port} = 18191</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.438865" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.442370" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.472019" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.472245" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.442097" elapsed="0.030207"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.473213" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:55:57.473349" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.472468" elapsed="0.000985">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.472423" elapsed="0.001122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.441793" elapsed="0.032050">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.441400" elapsed="0.032676"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.474949" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18191 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.548219" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.548449" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.474433" elapsed="0.074074"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.548642" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:55:57.549102" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.440986" elapsed="0.108227"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.549856" elapsed="0.000867"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.440186" elapsed="0.110765"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.438393" elapsed="0.112749"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.437849" elapsed="0.113397"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.436856" elapsed="0.114513"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.436387" elapsed="0.115079"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.552610" level="INFO">${next} = 18192</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.551850" elapsed="0.000820"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.554000" level="INFO">${current_port} = 18192</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.553084" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.430618" elapsed="0.123606"/>
</kw>
<msg time="2026-08-15T23:55:57.554310" level="INFO">Repeating keyword, round 363/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.556869" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.556593" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.556550" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.557729" level="INFO">${current_Date} = 2026-08-15 23:55:57.558</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.557338" elapsed="0.000450"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.558770" level="INFO">${ellapsed_seconds} = 2632.779</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.558154" elapsed="0.000672"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.559263" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.558926" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.558900" elapsed="0.000473"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.556064" elapsed="0.003373"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.560172" level="INFO">${number} = 363</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.559642" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.562229" level="INFO">${number} = 363</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.561718" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.565036" level="INFO">${device-port} = 18192</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.563903" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.568599" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.596082" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.596305" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.568460" elapsed="0.027905"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.597301" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:57.597438" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.596528" elapsed="0.001108">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.596483" elapsed="0.001252">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.568071" elapsed="0.029978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.567501" elapsed="0.030692"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.599076" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18192 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.668107" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.668319" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.598544" elapsed="0.069829"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.668483" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:55:57.669033" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.566926" elapsed="0.102236"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.669767" elapsed="0.000979"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.565781" elapsed="0.105215"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.563251" elapsed="0.107951"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.562493" elapsed="0.108814"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.561073" elapsed="0.110359"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.560425" elapsed="0.111104"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.672766" level="INFO">${next} = 18193</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.671936" elapsed="0.000941"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.674206" level="INFO">${current_port} = 18193</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.673268" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.554743" elapsed="0.119693"/>
</kw>
<msg time="2026-08-15T23:55:57.674523" level="INFO">Repeating keyword, round 364/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.677433" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.677173" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.677119" elapsed="0.000474"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.678001" level="INFO">${current_Date} = 2026-08-15 23:55:57.678</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.677842" elapsed="0.000186"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.678483" level="INFO">${ellapsed_seconds} = 2632.659</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.678178" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.678833" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.678581" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.678563" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.676404" elapsed="0.002560"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.679484" level="INFO">${number} = 364</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.679112" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.681004" level="INFO">${number} = 364</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.680589" elapsed="0.000444"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.683057" level="INFO">${device-port} = 18193</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.682230" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.685706" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.720541" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.720781" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.685603" elapsed="0.035295"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.721916" elapsed="0.000069"/>
</kw>
<msg time="2026-08-15T23:55:57.722071" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.721112" elapsed="0.001067">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.721056" elapsed="0.001228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.685303" elapsed="0.037271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.684884" elapsed="0.037953"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.723862" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18193 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.788137" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.788382" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.723306" elapsed="0.065134"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.788565" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:57.789049" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.684411" elapsed="0.104751"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.789779" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.683589" elapsed="0.107365"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.681745" elapsed="0.109403"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.681202" elapsed="0.110049"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.680138" elapsed="0.111240"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.679671" elapsed="0.111805"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.792912" level="INFO">${next} = 18194</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.792042" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.794292" level="INFO">${current_port} = 18194</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.793351" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.674988" elapsed="0.119531"/>
</kw>
<msg time="2026-08-15T23:55:57.794606" level="INFO">Repeating keyword, round 365/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.797019" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.796860" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.796829" elapsed="0.000281"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.797560" level="INFO">${current_Date} = 2026-08-15 23:55:57.797</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.797315" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.798292" level="INFO">${ellapsed_seconds} = 2632.54</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.797830" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.798786" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.798430" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.798402" elapsed="0.000527"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.796472" elapsed="0.002530"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.799735" level="INFO">${number} = 365</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.799209" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.801907" level="INFO">${number} = 365</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.801387" elapsed="0.000562"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.804782" level="INFO">${device-port} = 18194</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.803618" elapsed="0.001305"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.808440" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.840887" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.841126" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.808301" elapsed="0.032895"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.842147" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:57.842285" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.841369" elapsed="0.001119">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.841321" elapsed="0.001283">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.807911" elapsed="0.035026">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.807295" elapsed="0.035789"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.843987" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18194 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:57.912574" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.912864" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.843435" elapsed="0.069505"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:57.913069" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:55:57.913524" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.806693" elapsed="0.106953"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:57.914343" elapsed="0.001060"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.805535" elapsed="0.110077"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.802959" elapsed="0.112919"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.802183" elapsed="0.113828"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.800711" elapsed="0.115440"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.800040" elapsed="0.116219"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.917552" level="INFO">${next} = 18195</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.916645" elapsed="0.000974"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.919182" level="INFO">${current_port} = 18195</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:57.918095" elapsed="0.001199"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.795099" elapsed="0.124340"/>
</kw>
<msg time="2026-08-15T23:55:57.919535" level="INFO">Repeating keyword, round 366/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:57.922409" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:57.922141" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.922094" elapsed="0.000477"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.923587" level="INFO">${current_Date} = 2026-08-15 23:55:57.923</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:57.923202" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:57.924119" level="INFO">${ellapsed_seconds} = 2632.414</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:57.923772" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.924475" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:57.924223" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:57.924204" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:57.921521" elapsed="0.003089"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.925156" level="INFO">${number} = 366</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.924760" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.926624" level="INFO">${number} = 366</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.926275" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:57.928755" level="INFO">${device-port} = 18195</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:57.927935" elapsed="0.000922"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.931380" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:57.968437" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:57.968720" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.931277" elapsed="0.037504"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:57.969897" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:55:57.970047" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:57.969054" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:57.968989" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:57.930993" elapsed="0.039602">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:57.930537" elapsed="0.040418"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:57.971910" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18195 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.040521" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.040658" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:57.971353" elapsed="0.069340"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.040770" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:58.041085" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:57.930125" elapsed="0.111031"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.041515" elapsed="0.000621"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:57.929305" elapsed="0.112952"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:57.927389" elapsed="0.115014"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:57.926831" elapsed="0.115639"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.925819" elapsed="0.116733"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:57.925348" elapsed="0.117268"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.043360" level="INFO">${next} = 18196</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.042861" elapsed="0.000536"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.044219" level="INFO">${current_port} = 18196</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.043631" elapsed="0.000647"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:57.920087" elapsed="0.124275"/>
</kw>
<msg time="2026-08-15T23:55:58.044419" level="INFO">Repeating keyword, round 367/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.046081" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.045927" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.045899" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.046618" level="INFO">${current_Date} = 2026-08-15 23:55:58.046</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.046386" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.047344" level="INFO">${ellapsed_seconds} = 2632.291</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.046892" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.047844" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.047479" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.047453" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.045565" elapsed="0.002453"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.048730" level="INFO">${number} = 367</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.048223" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.050720" level="INFO">${number} = 367</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.050301" elapsed="0.000445"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.052718" level="INFO">${device-port} = 18196</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.051933" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.055453" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.095858" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.096086" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.055200" elapsed="0.040945"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.097055" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:58.097191" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.096313" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.096267" elapsed="0.001216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.054927" elapsed="0.042837">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.054505" elapsed="0.043460"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.098835" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18196 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.164041" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.164265" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.098323" elapsed="0.065999"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.164439" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:55:58.164894" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.054080" elapsed="0.110930"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.165614" elapsed="0.000890"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.053265" elapsed="0.113431"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.051460" elapsed="0.115469"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.050924" elapsed="0.116109"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.049628" elapsed="0.117527"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.049006" elapsed="0.118244"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.168383" level="INFO">${next} = 18197</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.167595" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.169741" level="INFO">${current_port} = 18197</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.168841" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.044701" elapsed="0.125329"/>
</kw>
<msg time="2026-08-15T23:55:58.170116" level="INFO">Repeating keyword, round 368/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.172654" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.172405" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.172362" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.173639" level="INFO">${current_Date} = 2026-08-15 23:55:58.173</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.173235" elapsed="0.000465"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.174661" level="INFO">${ellapsed_seconds} = 2632.164</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.174070" elapsed="0.000617"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.175020" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.174757" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.174739" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.171870" elapsed="0.003274"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.175653" level="INFO">${number} = 368</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.175290" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.177094" level="INFO">${number} = 368</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.176737" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.179101" level="INFO">${device-port} = 18197</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.178299" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.181786" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.216344" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.216580" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.181535" elapsed="0.035106"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.217594" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:58.217732" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.216849" elapsed="0.001021">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.216766" elapsed="0.001200">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.181250" elapsed="0.036991">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.180862" elapsed="0.037587"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.219334" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18197 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.288591" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.288870" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.218840" elapsed="0.070092"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.289050" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:58.289459" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.180432" elapsed="0.109139"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.290181" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.179624" elapsed="0.111646"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.177850" elapsed="0.113612"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.177278" elapsed="0.114285"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.176296" elapsed="0.115390"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.175849" elapsed="0.115936"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.293027" level="INFO">${next} = 18198</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.292179" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.294384" level="INFO">${current_port} = 18198</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.293453" elapsed="0.001036"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.170552" elapsed="0.124068"/>
</kw>
<msg time="2026-08-15T23:55:58.294708" level="INFO">Repeating keyword, round 369/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.297353" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.297107" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.297063" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.297964" level="INFO">${current_Date} = 2026-08-15 23:55:58.298</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.297727" elapsed="0.000275"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.298631" level="INFO">${ellapsed_seconds} = 2632.039</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.298208" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.299115" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.298765" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.298739" elapsed="0.000486"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.296466" elapsed="0.002822"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.300028" level="INFO">${number} = 369</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.299492" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.302063" level="INFO">${number} = 369</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.301572" elapsed="0.000529"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.304879" level="INFO">${device-port} = 18198</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.303708" elapsed="0.001285"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.308609" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.339904" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.340140" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.308470" elapsed="0.031732"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.341156" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:58.341293" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.340373" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.340327" elapsed="0.001257">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.307885" elapsed="0.034003">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.307324" elapsed="0.034712"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.342918" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18198 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.408430" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.408679" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.342389" elapsed="0.066346"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.408911" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:55:58.409358" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.306726" elapsed="0.102743"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.410151" elapsed="0.000983"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.305606" elapsed="0.105722"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.303076" elapsed="0.108445"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.302321" elapsed="0.109305"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.300948" elapsed="0.110802"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.300282" elapsed="0.111629"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.413155" level="INFO">${next} = 18199</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.412312" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.414539" level="INFO">${current_port} = 18199</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.413581" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.295201" elapsed="0.119567"/>
</kw>
<msg time="2026-08-15T23:55:58.414939" level="INFO">Repeating keyword, round 370/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.417077" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.416962" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.416940" elapsed="0.000202"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.417497" level="INFO">${current_Date} = 2026-08-15 23:55:58.417</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.417331" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.418019" level="INFO">${ellapsed_seconds} = 2631.92</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.417680" elapsed="0.000365"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.418364" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.418116" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.418098" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.416700" elapsed="0.001789"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.419019" level="INFO">${number} = 370</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.418638" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.420480" level="INFO">${number} = 370</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.420131" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.422524" level="INFO">${device-port} = 18199</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.421700" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.425351" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.460666" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.460937" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.425251" elapsed="0.035750"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.461910" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:55:58.462047" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.461167" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.461120" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.424964" elapsed="0.037557">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.424346" elapsed="0.038388"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.463594" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18199 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.532701" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.532950" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.463112" elapsed="0.069894"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.533115" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:58.533512" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.423904" elapsed="0.109719"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.534222" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.423080" elapsed="0.112232"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.421239" elapsed="0.114271"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.420667" elapsed="0.114943"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.419649" elapsed="0.116083"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.419201" elapsed="0.116667"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.537992" level="INFO">${next} = 18200</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.536222" elapsed="0.001832"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.539365" level="INFO">${current_port} = 18200</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.538415" elapsed="0.001054"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.415397" elapsed="0.124202"/>
</kw>
<msg time="2026-08-15T23:55:58.539685" level="INFO">Repeating keyword, round 371/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.542218" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.541975" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.541932" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.543058" level="INFO">${current_Date} = 2026-08-15 23:55:58.543</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.542680" elapsed="0.000438"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.543921" level="INFO">${ellapsed_seconds} = 2631.794</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.543492" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.544255" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.544018" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.543999" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.541409" elapsed="0.002970"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.544905" level="INFO">${number} = 371</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.544524" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.546346" level="INFO">${number} = 371</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.546008" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.548323" level="INFO">${device-port} = 18200</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.547526" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.551029" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.584424" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.584718" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.550931" elapsed="0.033848"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.585991" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:55:58.586154" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.585107" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.585014" elapsed="0.001473">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.550634" elapsed="0.036158">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.550075" elapsed="0.036936"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.587961" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18200 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.652342" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.652556" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.587408" elapsed="0.065202"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.652725" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:55:58.653230" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.549638" elapsed="0.103707"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.653972" elapsed="0.001058"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.548857" elapsed="0.106377"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.547066" elapsed="0.108368"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.546529" elapsed="0.109011"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.545543" elapsed="0.110129"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.545095" elapsed="0.110675"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.657064" level="INFO">${next} = 18201</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.656191" elapsed="0.000939"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.658456" level="INFO">${current_port} = 18201</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.657504" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.540143" elapsed="0.118579"/>
</kw>
<msg time="2026-08-15T23:55:58.658881" level="INFO">Repeating keyword, round 372/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.661522" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.661259" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.661216" elapsed="0.000457"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.662509" level="INFO">${current_Date} = 2026-08-15 23:55:58.662</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.662116" elapsed="0.000461"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.663720" level="INFO">${ellapsed_seconds} = 2631.675</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.662987" elapsed="0.000795"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.664554" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.663999" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.663954" elapsed="0.000785"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.660664" elapsed="0.004217"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.666077" level="INFO">${number} = 372</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.665218" elapsed="0.000922"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.668470" level="INFO">${number} = 372</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.668112" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.670574" level="INFO">${device-port} = 18201</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.669716" elapsed="0.000943"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.675914" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.704165" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.704404" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.675778" elapsed="0.028686"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.705419" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:58.705558" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.704638" elapsed="0.001028">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.704589" elapsed="0.001168">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.675476" elapsed="0.030608">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.672450" elapsed="0.033890"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.707249" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18201 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.776788" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.777037" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.706708" elapsed="0.070395"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.777218" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:58.777625" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.672008" elapsed="0.105728"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.778400" elapsed="0.000932"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.671145" elapsed="0.108383"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.669255" elapsed="0.110461"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.668659" elapsed="0.111200"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.667622" elapsed="0.112368"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.666556" elapsed="0.113530"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.781263" level="INFO">${next} = 18202</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.780450" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.782733" level="INFO">${current_port} = 18202</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.781685" elapsed="0.001210"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.659337" elapsed="0.124340"/>
</kw>
<msg time="2026-08-15T23:55:58.784324" level="INFO">Repeating keyword, round 373/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.787035" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.786880" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.786853" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.787575" level="INFO">${current_Date} = 2026-08-15 23:55:58.787</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.787343" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.788422" level="INFO">${ellapsed_seconds} = 2631.55</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.787838" elapsed="0.000620"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.788932" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.788556" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.788530" elapsed="0.000515"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.786495" elapsed="0.002613"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.790159" level="INFO">${number} = 373</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.789307" elapsed="0.000890"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.792187" level="INFO">${number} = 373</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.791685" elapsed="0.000539"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.795046" level="INFO">${device-port} = 18202</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.793899" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.798926" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.828519" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.828739" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.798750" elapsed="0.030047"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.829747" elapsed="0.000085"/>
</kw>
<msg time="2026-08-15T23:55:58.829914" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.829000" elapsed="0.001163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.828954" elapsed="0.001311">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.798178" elapsed="0.032361">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.797506" elapsed="0.033172"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.831537" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18202 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:58.910566" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.910775" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.831055" elapsed="0.079812"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:58.910978" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:55:58.911374" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.796936" elapsed="0.114547"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:58.912083" elapsed="0.000869"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.795772" elapsed="0.117413"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.793223" elapsed="0.120161"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.792443" elapsed="0.121042"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.791062" elapsed="0.122545"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.790415" elapsed="0.123285"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.914870" level="INFO">${next} = 18203</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.914084" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.916175" level="INFO">${current_port} = 18203</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:58.915290" elapsed="0.000982"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.785038" elapsed="0.131362"/>
</kw>
<msg time="2026-08-15T23:55:58.916485" level="INFO">Repeating keyword, round 374/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:58.919034" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:58.918755" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.918713" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.919949" level="INFO">${current_Date} = 2026-08-15 23:55:58.920</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:58.919565" elapsed="0.000444"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:58.921095" level="INFO">${ellapsed_seconds} = 2631.417</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:58.920342" elapsed="0.000813"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.921777" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:58.921314" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:58.921273" elapsed="0.000599"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:58.918225" elapsed="0.003693"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.922431" level="INFO">${number} = 374</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.922066" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.923878" level="INFO">${number} = 374</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.923520" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:58.925851" level="INFO">${device-port} = 18203</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:58.925065" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.928523" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:58.955870" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:58.956107" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.928261" elapsed="0.027904"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:58.957115" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:55:58.957253" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:58.956334" elapsed="0.001024">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:58.956287" elapsed="0.001162">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:58.927979" elapsed="0.029737">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:58.927570" elapsed="0.030390"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:58.958792" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18203 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.028466" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.028683" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:58.958313" elapsed="0.070425"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.028908" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:55:59.029316" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:58.927163" elapsed="0.102262"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.030043" elapsed="0.000979"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:58.926369" elapsed="0.104847"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:58.924578" elapsed="0.106826"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:58.924064" elapsed="0.107440"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.923077" elapsed="0.108551"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:58.922611" elapsed="0.109113"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.033007" level="INFO">${next} = 18204</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.032138" elapsed="0.000936"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.034365" level="INFO">${current_port} = 18204</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.033435" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:58.916960" elapsed="0.117636"/>
</kw>
<msg time="2026-08-15T23:55:59.034684" level="INFO">Repeating keyword, round 375/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.037067" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.036958" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.036939" elapsed="0.000192"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.037428" level="INFO">${current_Date} = 2026-08-15 23:55:59.037</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.037276" elapsed="0.000179"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.037928" level="INFO">${ellapsed_seconds} = 2631.3</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.037603" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.038259" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.038026" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.038007" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.036684" elapsed="0.001700"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.038910" level="INFO">${number} = 375</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.038530" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.040377" level="INFO">${number} = 375</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.040017" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.042415" level="INFO">${device-port} = 18204</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.041591" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.045050" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.080691" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.080989" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.044942" elapsed="0.036111"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.081985" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:59.082123" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.081230" elapsed="0.001099">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.081180" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.044633" elapsed="0.038079">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.044230" elapsed="0.038656"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.083731" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18204 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.152474" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.152688" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.083245" elapsed="0.069498"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.152911" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:55:59.153327" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.043775" elapsed="0.109661"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.154063" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.042979" elapsed="0.112209"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.041134" elapsed="0.114247"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.040564" elapsed="0.114919"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.039535" elapsed="0.116072"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.039090" elapsed="0.116645"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.156990" level="INFO">${next} = 18205</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.156158" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.158340" level="INFO">${current_port} = 18205</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.157420" elapsed="0.001019"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.035186" elapsed="0.123383"/>
</kw>
<msg time="2026-08-15T23:55:59.158659" level="INFO">Repeating keyword, round 376/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.161274" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.161030" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.160987" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.162201" level="INFO">${current_Date} = 2026-08-15 23:55:59.162</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.161847" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.163307" level="INFO">${ellapsed_seconds} = 2631.175</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.162594" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.164157" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.163525" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.163483" elapsed="0.000857"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.160468" elapsed="0.003975"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.165095" level="INFO">${number} = 376</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.164709" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.166533" level="INFO">${number} = 376</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.166186" elapsed="0.000374"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.168571" level="INFO">${device-port} = 18205</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.167750" elapsed="0.000903"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.171194" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.203748" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.204014" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.171094" elapsed="0.032981"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.204982" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:59.205120" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.204243" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.204198" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.170775" elapsed="0.034813">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.170372" elapsed="0.035422"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.206672" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18205 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.272138" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.272366" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.206182" elapsed="0.066242"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.272542" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:55:59.273028" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.169950" elapsed="0.103190"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.273710" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.169126" elapsed="0.105716"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.167262" elapsed="0.107807"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.166723" elapsed="0.108458"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.165722" elapsed="0.109587"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.165278" elapsed="0.110129"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.276575" level="INFO">${next} = 18206</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.275761" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.277946" level="INFO">${current_port} = 18206</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.277054" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.159167" elapsed="0.119007"/>
</kw>
<msg time="2026-08-15T23:55:59.278260" level="INFO">Repeating keyword, round 377/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.280841" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.280568" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.280525" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.281654" level="INFO">${current_Date} = 2026-08-15 23:55:59.281</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.281313" elapsed="0.000403"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.282768" level="INFO">${ellapsed_seconds} = 2631.056</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.282087" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.283615" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.283069" elapsed="0.000663"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.282979" elapsed="0.000784"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.280032" elapsed="0.003799"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.284344" level="INFO">${number} = 377</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.283979" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.285786" level="INFO">${number} = 377</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.285445" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.287774" level="INFO">${device-port} = 18206</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.286999" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.290325" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.324370" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.324599" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.290228" elapsed="0.034431"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.325583" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:59.325721" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.324867" elapsed="0.001090">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.324783" elapsed="0.001277">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.289952" elapsed="0.036383">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.289540" elapsed="0.036938"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.327374" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18206 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.396568" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.396784" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.326885" elapsed="0.069994"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.396999" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:59.397409" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.289134" elapsed="0.108386"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.398124" elapsed="0.000930"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.288312" elapsed="0.110936"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.286513" elapsed="0.112928"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.285992" elapsed="0.113548"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.284996" elapsed="0.114667"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.284526" elapsed="0.115231"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.400944" level="INFO">${next} = 18207</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.400147" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.402250" level="INFO">${current_port} = 18207</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.401367" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.278681" elapsed="0.123824"/>
</kw>
<msg time="2026-08-15T23:55:59.402592" level="INFO">Repeating keyword, round 378/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.405389" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.405136" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.405092" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.406424" level="INFO">${current_Date} = 2026-08-15 23:55:59.406</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.406009" elapsed="0.000482"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.407306" level="INFO">${ellapsed_seconds} = 2630.931</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.406857" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.407784" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.407447" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.407421" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.404523" elapsed="0.003469"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.408789" level="INFO">${number} = 378</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.408200" elapsed="0.000652"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.410948" level="INFO">${number} = 378</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.410387" elapsed="0.000600"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.413708" level="INFO">${device-port} = 18207</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.412586" elapsed="0.001259"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.417465" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.448600" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.448862" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.417327" elapsed="0.031598"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.449794" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:55:59.449961" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.449093" elapsed="0.000974">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.449047" elapsed="0.001150">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.416938" elapsed="0.033538">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.416301" elapsed="0.034387"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.451563" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18207 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.520473" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.520739" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.451074" elapsed="0.069771"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.520982" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:55:59.521538" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.415692" elapsed="0.106000"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.522516" elapsed="0.001197"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.414469" elapsed="0.109502"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.411967" elapsed="0.112205"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.411211" elapsed="0.113066"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.409714" elapsed="0.114689"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.409077" elapsed="0.115425"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.525850" level="INFO">${next} = 18208</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.524982" elapsed="0.000933"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.527246" level="INFO">${current_port} = 18208</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.526318" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.403092" elapsed="0.124384"/>
</kw>
<msg time="2026-08-15T23:55:59.527564" level="INFO">Repeating keyword, round 379/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.530222" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.529974" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.529929" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.530907" level="INFO">${current_Date} = 2026-08-15 23:55:59.531</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.530700" elapsed="0.000235"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.531412" level="INFO">${ellapsed_seconds} = 2630.806</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.531091" elapsed="0.000347"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.531760" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.531508" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.531489" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.529335" elapsed="0.002572"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.532422" level="INFO">${number} = 379</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.532055" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.533896" level="INFO">${number} = 379</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.533514" elapsed="0.000409"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.535907" level="INFO">${device-port} = 18208</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.535081" elapsed="0.000908"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.538699" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.576098" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.576325" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.538441" elapsed="0.037944"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.577318" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:55:59.577477" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.576555" elapsed="0.001127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.576508" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.538163" elapsed="0.039940">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.537694" elapsed="0.040552"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.579138" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18208 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.644591" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.644840" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.578602" elapsed="0.066297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.645012" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:55:59.645486" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.537265" elapsed="0.108338"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.646210" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.536441" elapsed="0.110856"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.534609" elapsed="0.112884"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.534080" elapsed="0.113515"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.533069" elapsed="0.114651"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.532604" elapsed="0.115250"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.649006" level="INFO">${next} = 18209</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.648204" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.650345" level="INFO">${current_port} = 18209</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.649453" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.528042" elapsed="0.122529"/>
</kw>
<msg time="2026-08-15T23:55:59.650657" level="INFO">Repeating keyword, round 380/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.653251" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.652961" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.652919" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.653954" level="INFO">${current_Date} = 2026-08-15 23:55:59.654</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.653771" elapsed="0.000210"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.654441" level="INFO">${ellapsed_seconds} = 2630.683</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.654130" elapsed="0.000337"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.654776" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.654537" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.654519" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.652406" elapsed="0.002519"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.655435" level="INFO">${number} = 380</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.655071" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.656890" level="INFO">${number} = 380</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.656528" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.658917" level="INFO">${device-port} = 18209</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.658097" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.661635" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.691740" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.692009" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.661390" elapsed="0.030679"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.693002" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:59.693143" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.692234" elapsed="0.001016">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.692189" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.661113" elapsed="0.032511">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.660680" elapsed="0.033207"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.694719" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18209 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.759887" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.760103" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.694238" elapsed="0.065919"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.760268" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:55:59.760723" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.660272" elapsed="0.100605"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.761447" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.659464" elapsed="0.103061"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.657612" elapsed="0.105101"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.657092" elapsed="0.105775"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.656085" elapsed="0.106941"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.655616" elapsed="0.107508"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.764266" level="INFO">${next} = 18210</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.763473" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.765611" level="INFO">${current_port} = 18210</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.764719" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.651139" elapsed="0.114764"/>
</kw>
<msg time="2026-08-15T23:55:59.765997" level="INFO">Repeating keyword, round 381/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.768548" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.768255" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.768212" elapsed="0.000480"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.769392" level="INFO">${current_Date} = 2026-08-15 23:55:59.769</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.769047" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.770091" level="INFO">${ellapsed_seconds} = 2630.568</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.769762" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.770421" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.770187" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.770169" elapsed="0.000330"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.767679" elapsed="0.002865"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.771069" level="INFO">${number} = 381</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.770689" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.772500" level="INFO">${number} = 381</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.772150" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.774458" level="INFO">${device-port} = 18210</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.773661" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.777158" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.808070" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.808325" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.777060" elapsed="0.031329"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.809389" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:55:59.809537" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.808555" elapsed="0.001183">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.808509" elapsed="0.001363">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.776604" elapsed="0.033549">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.776200" elapsed="0.034096"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.811179" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18210 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.876144" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.876358" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.810641" elapsed="0.065772"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.876529" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:55:59.877103" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.775768" elapsed="0.101458"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.877925" elapsed="0.000932"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.774994" elapsed="0.104080"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.773217" elapsed="0.106051"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.772684" elapsed="0.106685"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.771689" elapsed="0.107802"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.771250" elapsed="0.108334"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.880789" level="INFO">${next} = 18211</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.880026" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.882209" level="INFO">${current_port} = 18211</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:55:59.881292" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.766422" elapsed="0.116016"/>
</kw>
<msg time="2026-08-15T23:55:59.882527" level="INFO">Repeating keyword, round 382/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:55:59.885167" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:55:59.884899" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.884854" elapsed="0.000457"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.886103" level="INFO">${current_Date} = 2026-08-15 23:55:59.886</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:55:59.885716" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:55:59.887215" level="INFO">${ellapsed_seconds} = 2630.451</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:55:59.886497" elapsed="0.000776"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.888099" elapsed="0.000064"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:55:59.887430" elapsed="0.000814"/>
</branch>
<status status="PASS" start="2026-08-15T23:55:59.887391" elapsed="0.000908"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:55:59.884338" elapsed="0.004067"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.889130" level="INFO">${number} = 382</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.888730" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.890563" level="INFO">${number} = 382</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.890223" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:55:59.892616" level="INFO">${device-port} = 18211</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:55:59.891827" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.895348" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:55:59.927653" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.927952" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.895250" elapsed="0.032765"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:55:59.928972" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:55:59.929114" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:55:59.928205" elapsed="0.001034">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:55:59.928153" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:55:59.894975" elapsed="0.034649">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:55:59.894382" elapsed="0.035485"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:55:59.930739" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18211 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:55:59.996267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:55:59.996492" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:55:59.930242" elapsed="0.066307"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:55:59.996665" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:55:59.997181" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:55:59.893972" elapsed="0.103335"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:55:59.997951" elapsed="0.000977"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:55:59.893158" elapsed="0.105994"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:55:59.891298" elapsed="0.108094"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:55:59.890752" elapsed="0.108745"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.889760" elapsed="0.109868"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:55:59.889313" elapsed="0.110412"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.001014" level="INFO">${next} = 18212</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.000139" elapsed="0.000938"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.002375" level="INFO">${current_port} = 18212</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.001451" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:55:59.883028" elapsed="0.119579"/>
</kw>
<msg time="2026-08-15T23:56:00.002696" level="INFO">Repeating keyword, round 383/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.005431" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.005168" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.005120" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.006339" level="INFO">${current_Date} = 2026-08-15 23:56:00.006</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.005957" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.007599" level="INFO">${ellapsed_seconds} = 2630.331</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.006758" elapsed="0.000922"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.008046" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.007775" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.007750" elapsed="0.000376"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.004556" elapsed="0.003618"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.008717" level="INFO">${number} = 383</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.008334" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.010208" level="INFO">${number} = 383</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.009857" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.012260" level="INFO">${device-port} = 18212</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.011447" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.015025" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.057893" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.058132" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.014923" elapsed="0.043270"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.059151" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:00.059290" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.058367" elapsed="0.001111">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.058319" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.014622" elapsed="0.045266">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.014043" elapsed="0.045991"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.061010" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18212 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.124118" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.124335" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.060381" elapsed="0.064009"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.124503" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:00.124953" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.013603" elapsed="0.111460"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.125660" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.012788" elapsed="0.114052"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.010971" elapsed="0.116075"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.010403" elapsed="0.116746"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.009388" elapsed="0.117886"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.008929" elapsed="0.118438"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.128575" level="INFO">${next} = 18213</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.127734" elapsed="0.000904"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.130042" level="INFO">${current_port} = 18213</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.129050" elapsed="0.001092"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.003187" elapsed="0.127087"/>
</kw>
<msg time="2026-08-15T23:56:00.130360" level="INFO">Repeating keyword, round 384/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.132472" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.132310" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.132284" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.133075" level="INFO">${current_Date} = 2026-08-15 23:56:00.133</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.132848" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.133790" level="INFO">${ellapsed_seconds} = 2630.204</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.133324" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.134285" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.133952" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.133926" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.131962" elapsed="0.002499"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.135259" level="INFO">${number} = 384</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.134711" elapsed="0.000730"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.137628" level="INFO">${number} = 384</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.137106" elapsed="0.000561"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.140490" level="INFO">${device-port} = 18213</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.139380" elapsed="0.001223"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.146637" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.171726" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.171990" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.146507" elapsed="0.025542"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.172970" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:00.173108" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.172219" elapsed="0.000997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.172171" elapsed="0.001137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.146212" elapsed="0.027370">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.143018" elapsed="0.030806"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.174695" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18213 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.240128" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.240339" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.174180" elapsed="0.066214"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.240503" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:00.240959" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.142363" elapsed="0.098709"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.241623" elapsed="0.000979"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.141246" elapsed="0.101598"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.138720" elapsed="0.104321"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.137957" elapsed="0.105183"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.136380" elapsed="0.106880"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.135694" elapsed="0.107660"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.244536" level="INFO">${next} = 18214</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.243699" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.245911" level="INFO">${current_port} = 18214</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.244999" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.130894" elapsed="0.115272"/>
</kw>
<msg time="2026-08-15T23:56:00.246253" level="INFO">Repeating keyword, round 385/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.248779" elapsed="0.000064"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.248535" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.248493" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.249636" level="INFO">${current_Date} = 2026-08-15 23:56:00.249</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.249280" elapsed="0.000415"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.250794" level="INFO">${ellapsed_seconds} = 2630.088</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.250174" elapsed="0.000684"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.251297" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.250958" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.250932" elapsed="0.000539"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.248006" elapsed="0.003530"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.252273" level="INFO">${number} = 385</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.251740" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.254345" level="INFO">${number} = 385</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.253820" elapsed="0.000563"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.257133" level="INFO">${device-port} = 18214</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.256012" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.261103" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.287829" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.287963" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.260960" elapsed="0.027040"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.288545" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:00.288628" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.288103" elapsed="0.000642">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.288074" elapsed="0.000752">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.260192" elapsed="0.028813">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.259621" elapsed="0.029473"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.289610" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18214 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.356004" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.356156" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.289311" elapsed="0.066881"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.356275" elapsed="0.000051"/>
</return>
<msg time="2026-08-15T23:56:00.356554" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.259049" elapsed="0.097587"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.357071" elapsed="0.000721"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.257893" elapsed="0.100148"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.255357" elapsed="0.102884"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.254604" elapsed="0.103743"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.253176" elapsed="0.105299"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.252526" elapsed="0.106053"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.359781" level="INFO">${next} = 18215</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.359003" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.361191" level="INFO">${current_port} = 18215</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.360256" elapsed="0.001039"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.246674" elapsed="0.114780"/>
</kw>
<msg time="2026-08-15T23:56:00.361608" level="INFO">Repeating keyword, round 386/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.363606" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.363448" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.363420" elapsed="0.000280"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.364225" level="INFO">${current_Date} = 2026-08-15 23:56:00.364</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.363985" elapsed="0.000279"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.364959" level="INFO">${ellapsed_seconds} = 2629.973</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.364475" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.365446" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.365101" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.365074" elapsed="0.000507"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.363109" elapsed="0.002539"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.366409" level="INFO">${number} = 386</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.365882" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.368498" level="INFO">${number} = 386</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.367995" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.371398" level="INFO">${device-port} = 18215</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.370254" elapsed="0.001260"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.375316" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.404332" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.404570" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.375033" elapsed="0.029606"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.405706" elapsed="0.000069"/>
</kw>
<msg time="2026-08-15T23:56:00.405897" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.404877" elapsed="0.001132">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.404781" elapsed="0.001324">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.374626" elapsed="0.031757">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.374034" elapsed="0.032563"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.407475" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18215 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.472344" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.472712" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.406985" elapsed="0.065793"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.472995" elapsed="0.000121"/>
</return>
<msg time="2026-08-15T23:56:00.473534" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.373378" elapsed="0.100272"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.474390" elapsed="0.001065"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.372188" elapsed="0.103481"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.369574" elapsed="0.106344"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.368762" elapsed="0.107290"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.367331" elapsed="0.108865"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.366671" elapsed="0.109640"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.477610" level="INFO">${next} = 18216</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.476690" elapsed="0.000993"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.479584" level="INFO">${current_port} = 18216</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.478124" elapsed="0.001565"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.362117" elapsed="0.117750"/>
</kw>
<msg time="2026-08-15T23:56:00.479963" level="INFO">Repeating keyword, round 387/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.482217" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.482094" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.482071" elapsed="0.000214"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.482621" level="INFO">${current_Date} = 2026-08-15 23:56:00.483</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.482440" elapsed="0.000208"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.483160" level="INFO">${ellapsed_seconds} = 2629.854</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.482815" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.483523" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.483262" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.483242" elapsed="0.000406"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.481835" elapsed="0.001863"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.484274" level="INFO">${number} = 387</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.483883" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.485866" level="INFO">${number} = 387</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.485483" elapsed="0.000410"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.487901" level="INFO">${device-port} = 18216</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.487085" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.490530" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.519863" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.520095" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.490416" elapsed="0.029740"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.521127" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:00.521269" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.520326" elapsed="0.001159">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.520280" elapsed="0.001308">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.490131" elapsed="0.031787">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.489704" elapsed="0.032363"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.522949" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18216 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.588570" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.588881" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.522424" elapsed="0.066518"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.589084" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:00.589542" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.489284" elapsed="0.100372"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.590298" elapsed="0.000955"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.488444" elapsed="0.103004"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.486605" elapsed="0.105036"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.486060" elapsed="0.105686"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.485005" elapsed="0.106917"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.484484" elapsed="0.107538"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.593205" level="INFO">${next} = 18217</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.592369" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.594659" level="INFO">${current_port} = 18217</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.593638" elapsed="0.001227"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.480463" elapsed="0.114565"/>
</kw>
<msg time="2026-08-15T23:56:00.595118" level="INFO">Repeating keyword, round 388/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.597321" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.597200" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.597177" elapsed="0.000212"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.597796" level="INFO">${current_Date} = 2026-08-15 23:56:00.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.597612" elapsed="0.000236"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.598360" level="INFO">${ellapsed_seconds} = 2629.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.598017" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.598728" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.598462" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.598443" elapsed="0.000399"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.596949" elapsed="0.001944"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.599419" level="INFO">${number} = 388</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.599044" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.600937" level="INFO">${number} = 388</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.600564" elapsed="0.000401"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.603095" level="INFO">${device-port} = 18217</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.602241" elapsed="0.000939"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.605793" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.635944" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.636188" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.605688" elapsed="0.030567"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.637189" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:00.637325" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.636425" elapsed="0.001010">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.636378" elapsed="0.001149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.605397" elapsed="0.032444">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.604989" elapsed="0.033079"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.638937" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18217 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.704007" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.704242" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.638422" elapsed="0.065878"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.704416" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:00.704864" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.604527" elapsed="0.100454"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.705548" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.603635" elapsed="0.103003"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.601750" elapsed="0.105120"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.601128" elapsed="0.105850"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.600080" elapsed="0.107025"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.599606" elapsed="0.107596"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.708380" level="INFO">${next} = 18218</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.707549" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.709706" level="INFO">${current_port} = 18218</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.708842" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.595675" elapsed="0.114324"/>
</kw>
<msg time="2026-08-15T23:56:00.710085" level="INFO">Repeating keyword, round 389/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.712715" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.712489" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.712445" elapsed="0.000385"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.713256" level="INFO">${current_Date} = 2026-08-15 23:56:00.713</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.713037" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.713958" level="INFO">${ellapsed_seconds} = 2629.624</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.713503" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.714428" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.714094" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.714067" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.711943" elapsed="0.002661"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.715342" level="INFO">${number} = 389</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.714828" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.717463" level="INFO">${number} = 389</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.716981" elapsed="0.000520"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.720264" level="INFO">${device-port} = 18218</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.719124" elapsed="0.001253"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.723986" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.752571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.752837" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.723671" elapsed="0.029231"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.753780" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:00.753948" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.753071" elapsed="0.001068">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.753025" elapsed="0.001215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.723292" elapsed="0.031224">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.722722" elapsed="0.031935"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.755518" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18218 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.820353" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.820571" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.755037" elapsed="0.065590"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.820740" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:56:00.821192" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.722147" elapsed="0.099156"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.821905" elapsed="0.000851"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.721023" elapsed="0.101962"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.718470" elapsed="0.104705"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.717723" elapsed="0.105552"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.716331" elapsed="0.107116"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.715598" elapsed="0.107947"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.824693" level="INFO">${next} = 18219</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.823937" elapsed="0.000818"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.826094" level="INFO">${current_port} = 18219</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.825167" elapsed="0.001026"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.710512" elapsed="0.115808"/>
</kw>
<msg time="2026-08-15T23:56:00.826405" level="INFO">Repeating keyword, round 390/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.828990" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.828714" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.828672" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.829916" level="INFO">${current_Date} = 2026-08-15 23:56:00.830</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.829535" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.831027" level="INFO">${ellapsed_seconds} = 2629.507</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.830309" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.831853" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.831319" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.831202" elapsed="0.000734"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.828184" elapsed="0.003798"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.832495" level="INFO">${number} = 390</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.832128" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.833949" level="INFO">${number} = 390</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.833590" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.835962" level="INFO">${device-port} = 18219</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.835145" elapsed="0.000897"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.838460" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.871815" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.871916" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.838362" elapsed="0.033580"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.872334" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:56:00.872393" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.872016" elapsed="0.000425">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.871995" elapsed="0.000487">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.838090" elapsed="0.034515">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.837678" elapsed="0.035021"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.873089" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18219 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:00.939857" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.939955" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.872872" elapsed="0.067107"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:00.940030" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:56:00.940209" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.837273" elapsed="0.102985"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:00.940507" elapsed="0.000403"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.836476" elapsed="0.104519"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.834679" elapsed="0.106402"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.834134" elapsed="0.106993"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.833142" elapsed="0.108039"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.832677" elapsed="0.108548"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.941713" level="INFO">${next} = 18220</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.941379" elapsed="0.000361"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.942304" level="INFO">${current_port} = 18220</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:00.941919" elapsed="0.000427"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.826879" elapsed="0.115524"/>
</kw>
<msg time="2026-08-15T23:56:00.942443" level="INFO">Repeating keyword, round 391/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:00.943578" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:00.943469" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.943449" elapsed="0.000192"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.943969" level="INFO">${current_Date} = 2026-08-15 23:56:00.944</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:00.943786" elapsed="0.000209"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:00.944460" level="INFO">${ellapsed_seconds} = 2629.393</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:00.944143" elapsed="0.000343"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.944790" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:00.944557" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:00.944537" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:00.943227" elapsed="0.001712"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.945445" level="INFO">${number} = 391</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.945084" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.946926" level="INFO">${number} = 391</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.946544" elapsed="0.000410"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:00.948917" level="INFO">${device-port} = 18220</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:00.948109" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.951595" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:00.992381" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:00.992613" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.951354" elapsed="0.041320"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:00.993604" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:00.993739" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:00.992884" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:00.992798" elapsed="0.001257">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:00.951080" elapsed="0.043249">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:00.950649" elapsed="0.043820"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:00.995362" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18220 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.064142" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.064366" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:00.994866" elapsed="0.069557"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.064538" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:01.064987" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:00.950241" elapsed="0.114862"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.065673" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:00.949437" elapsed="0.117347"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:00.947635" elapsed="0.119375"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:00.947112" elapsed="0.119998"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.946099" elapsed="0.121138"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:00.945630" elapsed="0.121703"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.068464" level="INFO">${next} = 18221</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.067679" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.069780" level="INFO">${current_port} = 18221</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.068935" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:00.942636" elapsed="0.127409"/>
</kw>
<msg time="2026-08-15T23:56:01.070131" level="INFO">Repeating keyword, round 392/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.072651" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.072406" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.072365" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.073551" level="INFO">${current_Date} = 2026-08-15 23:56:01.073</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.073214" elapsed="0.000395"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.074642" level="INFO">${ellapsed_seconds} = 2629.264</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.073969" elapsed="0.000700"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.074996" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.074741" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.074722" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.071881" elapsed="0.003240"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.075631" level="INFO">${number} = 392</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.075266" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.077072" level="INFO">${number} = 392</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.076714" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.079043" level="INFO">${device-port} = 18221</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.078256" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.081677" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.116485" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.116709" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.081431" elapsed="0.035336"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.117677" elapsed="0.000054"/>
</kw>
<msg time="2026-08-15T23:56:01.117838" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.116976" elapsed="0.000971">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.116926" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.081158" elapsed="0.037175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.080755" elapsed="0.037790"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.119434" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18221 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.184330" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.184608" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.118959" elapsed="0.065705"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.184875" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:56:01.185368" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.080349" elapsed="0.105152"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.186300" elapsed="0.000961"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.079557" elapsed="0.107893"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.077774" elapsed="0.109870"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.077256" elapsed="0.110493"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.076274" elapsed="0.111648"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.075826" elapsed="0.112194"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.189187" level="INFO">${next} = 18222</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.188372" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.190559" level="INFO">${current_port} = 18222</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.189607" elapsed="0.001052"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.070579" elapsed="0.120209"/>
</kw>
<msg time="2026-08-15T23:56:01.190932" level="INFO">Repeating keyword, round 393/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.193517" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.193270" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.193226" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.194483" level="INFO">${current_Date} = 2026-08-15 23:56:01.194</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.194118" elapsed="0.000424"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.195092" level="INFO">${ellapsed_seconds} = 2629.143</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.194733" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.195470" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.195210" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.195190" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.192709" elapsed="0.002885"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.196128" level="INFO">${number} = 393</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.195741" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.197556" level="INFO">${number} = 393</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.197218" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.199571" level="INFO">${device-port} = 18222</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.198762" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.202323" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.235484" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.235713" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.202222" elapsed="0.033548"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.236750" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:56:01.236936" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.236005" elapsed="0.001134">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.235929" elapsed="0.001310">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.201755" elapsed="0.035797">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.201339" elapsed="0.036361"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.238580" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18222 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.304456" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.304713" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.238077" elapsed="0.066766"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.304999" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:01.305600" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.200927" elapsed="0.104833"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.306448" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.200117" elapsed="0.107464"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.198310" elapsed="0.109468"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.197761" elapsed="0.110169"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.196759" elapsed="0.111296"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.196309" elapsed="0.111842"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.309362" level="INFO">${next} = 18223</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.308500" elapsed="0.000924"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.310702" level="INFO">${current_port} = 18223</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.309782" elapsed="0.001091"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.191386" elapsed="0.119623"/>
</kw>
<msg time="2026-08-15T23:56:01.311099" level="INFO">Repeating keyword, round 394/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.313774" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.313525" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.313482" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.314898" level="INFO">${current_Date} = 2026-08-15 23:56:01.315</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.314478" elapsed="0.000484"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.316152" level="INFO">${ellapsed_seconds} = 2629.022</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.315303" elapsed="0.000914"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.316976" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.316381" elapsed="0.000727"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.316338" elapsed="0.000886"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.312879" elapsed="0.004474"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.318281" level="INFO">${number} = 394</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.317660" elapsed="0.000668"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.320408" level="INFO">${number} = 394</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.319931" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.323331" level="INFO">${device-port} = 18223</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.322145" elapsed="0.001301"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.327411" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.357612" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.357890" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.327269" elapsed="0.030684"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.358885" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:01.359025" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.358129" elapsed="0.001003">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.358078" elapsed="0.001147">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.326728" elapsed="0.032779">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.325941" elapsed="0.033799"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.360646" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18223 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.428933" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.429267" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.360156" elapsed="0.069170"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.429479" elapsed="0.000106"/>
</return>
<msg time="2026-08-15T23:56:01.429995" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.325301" elapsed="0.104806"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.430737" elapsed="0.000995"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.324102" elapsed="0.107858"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.321469" elapsed="0.110684"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.320670" elapsed="0.111586"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.319287" elapsed="0.113094"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.318611" elapsed="0.113868"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.433740" level="INFO">${next} = 18224</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.432943" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.434669" level="INFO">${current_port} = 18224</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.434094" elapsed="0.000635"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.311552" elapsed="0.123290"/>
</kw>
<msg time="2026-08-15T23:56:01.434904" level="INFO">Repeating keyword, round 395/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.436640" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.436480" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.436451" elapsed="0.000300"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.437217" level="INFO">${current_Date} = 2026-08-15 23:56:01.437</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.436982" elapsed="0.000272"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.437931" level="INFO">${ellapsed_seconds} = 2628.9</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.437460" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.438413" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.438064" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.438039" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.436141" elapsed="0.002443"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.439324" level="INFO">${number} = 395</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.438787" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.441368" level="INFO">${number} = 395</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.440887" elapsed="0.000518"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.444208" level="INFO">${device-port} = 18224</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.443085" elapsed="0.001265"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.447577" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.480251" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.480350" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.447475" elapsed="0.032901"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.481084" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:01.481221" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.480449" elapsed="0.000978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.480428" elapsed="0.001098">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.447196" elapsed="0.034645">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.446574" elapsed="0.035412"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.482834" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18224 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.553047" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.553266" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.482329" elapsed="0.070993"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.553435" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:01.553888" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.446131" elapsed="0.107876"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.554565" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.445052" elapsed="0.110642"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.442437" elapsed="0.113498"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.441671" elapsed="0.114368"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.440225" elapsed="0.115995"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.439575" elapsed="0.116749"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.557148" level="INFO">${next} = 18225</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.556650" elapsed="0.000535"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.557964" level="INFO">${current_port} = 18225</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.557408" elapsed="0.000618"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.435257" elapsed="0.122851"/>
</kw>
<msg time="2026-08-15T23:56:01.558161" level="INFO">Repeating keyword, round 396/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.559911" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.559719" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.559692" elapsed="0.000317"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.560522" level="INFO">${current_Date} = 2026-08-15 23:56:01.560</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.560300" elapsed="0.000259"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.561239" level="INFO">${ellapsed_seconds} = 2628.777</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.560769" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.561732" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.561381" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.561350" elapsed="0.000524"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.559365" elapsed="0.002575"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.562679" level="INFO">${number} = 396</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.562153" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.564778" level="INFO">${number} = 396</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.564274" elapsed="0.000563"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.567574" level="INFO">${device-port} = 18225</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.566455" elapsed="0.001232"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.573137" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.600163" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.600388" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.573031" elapsed="0.027415"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.601373" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:01.601507" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.600618" elapsed="0.000995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.600571" elapsed="0.001134">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.572717" elapsed="0.029299">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.569739" elapsed="0.032492"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.603101" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18225 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.671997" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.672212" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.602583" elapsed="0.069682"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.672378" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:01.672851" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.569322" elapsed="0.103647"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.673536" elapsed="0.000923"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.568373" elapsed="0.106275"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.565793" elapsed="0.109086"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.565062" elapsed="0.109922"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.563586" elapsed="0.111522"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.562957" elapsed="0.112246"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.676384" level="INFO">${next} = 18226</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.675548" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.677703" level="INFO">${current_port} = 18226</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.676840" elapsed="0.001019"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.558512" elapsed="0.119482"/>
</kw>
<msg time="2026-08-15T23:56:01.678080" level="INFO">Repeating keyword, round 397/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.680692" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.680449" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.680407" elapsed="0.000386"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.681248" level="INFO">${current_Date} = 2026-08-15 23:56:01.681</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.681019" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.681961" level="INFO">${ellapsed_seconds} = 2628.656</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.681495" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.682436" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.682095" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.682069" elapsed="0.000475"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.679903" elapsed="0.002704"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.683338" level="INFO">${number} = 397</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.682828" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.685376" level="INFO">${number} = 397</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.684903" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.688179" level="INFO">${device-port} = 18226</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.687052" elapsed="0.001237"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.752095" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.764898" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.765152" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.751920" elapsed="0.013297"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.766271" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:01.766419" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.765416" elapsed="0.001222">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.765362" elapsed="0.001385">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.691265" elapsed="0.075824">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.690676" elapsed="0.076571"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.768230" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18226 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.831718" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.831974" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.767672" elapsed="0.064361"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.832148" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:01.832582" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.690081" elapsed="0.142613"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.833308" elapsed="0.000974"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.688925" elapsed="0.145551"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.686389" elapsed="0.148279"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.685631" elapsed="0.149136"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.684262" elapsed="0.150674"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.683592" elapsed="0.151494"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.836254" level="INFO">${next} = 18227</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.835435" elapsed="0.000880"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.837587" level="INFO">${current_port} = 18227</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.836678" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.678508" elapsed="0.159365"/>
</kw>
<msg time="2026-08-15T23:56:01.837966" level="INFO">Repeating keyword, round 398/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.840228" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.840072" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.840045" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.840818" level="INFO">${current_Date} = 2026-08-15 23:56:01.841</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.840567" elapsed="0.000290"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.841512" level="INFO">${ellapsed_seconds} = 2628.496</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.841067" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.842009" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.841647" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.841621" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.839709" elapsed="0.002474"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.842919" level="INFO">${number} = 398</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.842387" elapsed="0.000581"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.844955" level="INFO">${number} = 398</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.844455" elapsed="0.000537"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.847740" level="INFO">${device-port} = 18227</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.846600" elapsed="0.001283"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.851719" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:01.887950" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.888175" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.851558" elapsed="0.036675"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.889145" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:01.889280" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:01.888399" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:01.888353" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.851168" elapsed="0.038587">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.850435" elapsed="0.039568"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.890902" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18227 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:01.960432" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:01.960666" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.890361" elapsed="0.070362"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:01.960872" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:01.961289" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.849618" elapsed="0.111780"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:01.962082" elapsed="0.000953"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.848498" elapsed="0.114728"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.845974" elapsed="0.117441"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.845215" elapsed="0.118299"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.843835" elapsed="0.119801"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.843186" elapsed="0.120544"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.964923" level="INFO">${next} = 18228</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.964120" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.966257" level="INFO">${current_port} = 18228</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:01.965346" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.838390" elapsed="0.128117"/>
</kw>
<msg time="2026-08-15T23:56:01.966597" level="INFO">Repeating keyword, round 399/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:01.969162" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:01.968917" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.968872" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.970018" level="INFO">${current_Date} = 2026-08-15 23:56:01.970</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:01.969637" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:01.971184" level="INFO">${ellapsed_seconds} = 2628.367</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:01.970410" elapsed="0.000834"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:01.971970" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:01.971407" elapsed="0.000689"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:01.971364" elapsed="0.000788"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:01.968349" elapsed="0.003907"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.973446" level="INFO">${number} = 399</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.972583" elapsed="0.000923"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.976219" level="INFO">${number} = 399</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.975876" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:01.978196" level="INFO">${device-port} = 18228</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:01.977394" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:01.980924" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.012427" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.012646" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:01.980824" elapsed="0.031881"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.013609" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:02.013742" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.012910" elapsed="0.001049">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.012862" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:01.980533" elapsed="0.033823">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:01.980146" elapsed="0.034354"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.015361" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18228 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.085023" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.085243" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.014876" elapsed="0.070423"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.085414" elapsed="0.000121"/>
</return>
<msg time="2026-08-15T23:56:02.085924" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:01.979704" elapsed="0.106456"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.086872" elapsed="0.000974"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:01.978726" elapsed="0.109330"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:01.976946" elapsed="0.111303"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:01.976405" elapsed="0.111946"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.974968" elapsed="0.113506"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:01.973888" elapsed="0.114680"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.089713" level="INFO">${next} = 18229</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.088960" elapsed="0.000813"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.091049" level="INFO">${current_port} = 18229</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.090288" elapsed="0.000824"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:01.967082" elapsed="0.124113"/>
</kw>
<msg time="2026-08-15T23:56:02.091249" level="INFO">Repeating keyword, round 400/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.092826" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.092652" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.092622" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.093393" level="INFO">${current_Date} = 2026-08-15 23:56:02.093</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.093173" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.094120" level="INFO">${ellapsed_seconds} = 2628.244</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.093643" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.094586" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.094260" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.094233" elapsed="0.000464"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.092317" elapsed="0.002443"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.095509" level="INFO">${number} = 400</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.094993" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.097532" level="INFO">${number} = 400</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.097054" elapsed="0.000515"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.100579" level="INFO">${device-port} = 18229</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.099330" elapsed="0.001362"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.104551" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.136250" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.136470" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.104414" elapsed="0.032113"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.137444" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:02.137579" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.136697" elapsed="0.000988">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.136652" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.104032" elapsed="0.034103">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.103394" elapsed="0.034952"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.139226" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18229 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.208384" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.208596" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.138700" elapsed="0.069951"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.208763" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:56:02.209207" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.102782" elapsed="0.106535"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.209950" elapsed="0.000880"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.101342" elapsed="0.109690"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.098662" elapsed="0.112563"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.097792" elapsed="0.113534"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.096412" elapsed="0.115037"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.095764" elapsed="0.115782"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.212689" level="INFO">${next} = 18230</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.211935" elapsed="0.000813"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.214093" level="INFO">${current_port} = 18230</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.213162" elapsed="0.001034"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.091514" elapsed="0.122812"/>
</kw>
<msg time="2026-08-15T23:56:02.214415" level="INFO">Repeating keyword, round 401/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.216957" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.216685" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.216642" elapsed="0.000457"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.217864" level="INFO">${current_Date} = 2026-08-15 23:56:02.218</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.217422" elapsed="0.000507"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.218878" level="INFO">${ellapsed_seconds} = 2628.119</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.218261" elapsed="0.000644"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.219210" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.218975" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.218955" elapsed="0.000338"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.216155" elapsed="0.003183"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.219870" level="INFO">${number} = 401</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.219482" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.221298" level="INFO">${number} = 401</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.220959" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.223293" level="INFO">${device-port} = 18230</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.222489" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.226057" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.259918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.260137" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.225959" elapsed="0.034236"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.261106" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:02.261242" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.260359" elapsed="0.001104">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.260314" elapsed="0.001255">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.225657" elapsed="0.036219">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.225246" elapsed="0.036777"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.262982" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18230 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.328535" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.328749" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.262371" elapsed="0.066466"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.328964" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:02.329429" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.224826" elapsed="0.104724"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.330175" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.223833" elapsed="0.107491"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.222038" elapsed="0.109490"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.221482" elapsed="0.110151"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.220497" elapsed="0.111275"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.220051" elapsed="0.111878"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.333105" level="INFO">${next} = 18231</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.332281" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.334459" level="INFO">${current_port} = 18231</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.333533" elapsed="0.001025"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.214888" elapsed="0.119802"/>
</kw>
<msg time="2026-08-15T23:56:02.334776" level="INFO">Repeating keyword, round 402/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.337458" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.337206" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.337158" elapsed="0.000443"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.337999" level="INFO">${current_Date} = 2026-08-15 23:56:02.338</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.337837" elapsed="0.000189"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.338480" level="INFO">${ellapsed_seconds} = 2627.999</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.338174" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.338833" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.338577" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.338558" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.336580" elapsed="0.002380"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.339474" level="INFO">${number} = 402</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.339107" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.340964" level="INFO">${number} = 402</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.340582" elapsed="0.000410"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.343010" level="INFO">${device-port} = 18231</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.342199" elapsed="0.000896"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.345771" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.380014" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.380112" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.345672" elapsed="0.034466"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.380674" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:02.380850" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.380213" elapsed="0.000792">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.380192" elapsed="0.000915">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.345393" elapsed="0.035990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.344985" elapsed="0.036618"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.382485" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18231 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.452356" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.452583" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.381999" elapsed="0.070667"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.452785" elapsed="0.000117"/>
</return>
<msg time="2026-08-15T23:56:02.453248" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.344547" elapsed="0.108813"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.454000" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.343538" elapsed="0.111564"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.341707" elapsed="0.113588"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.341171" elapsed="0.114226"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.340123" elapsed="0.115399"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.339656" elapsed="0.115961"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.456846" level="INFO">${next} = 18232</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.456012" elapsed="0.000898"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.458264" level="INFO">${current_port} = 18232</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.457281" elapsed="0.001088"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.335327" elapsed="0.123172"/>
</kw>
<msg time="2026-08-15T23:56:02.458588" level="INFO">Repeating keyword, round 403/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.460233" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.460078" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.460050" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.460775" level="INFO">${current_Date} = 2026-08-15 23:56:02.461</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.460526" elapsed="0.000308"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.461474" level="INFO">${ellapsed_seconds} = 2627.876</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.461044" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.461959" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.461609" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.461582" elapsed="0.000490"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.459720" elapsed="0.002417"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.462878" level="INFO">${number} = 403</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.462341" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.464907" level="INFO">${number} = 403</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.464398" elapsed="0.000547"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.467721" level="INFO">${device-port} = 18232</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.466598" elapsed="0.001262"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.471131" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.503831" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.504056" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.471031" elapsed="0.033083"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.505049" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:02.505186" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.504282" elapsed="0.001094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.504236" elapsed="0.001240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.470687" elapsed="0.035064">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.470297" elapsed="0.035633"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.506760" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18232 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.582640" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.582987" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.506279" elapsed="0.076790"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.583229" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:56:02.583788" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.469877" elapsed="0.114118"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.584950" elapsed="0.001089"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.468477" elapsed="0.117721"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.465967" elapsed="0.120395"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.465213" elapsed="0.121241"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.463757" elapsed="0.122804"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.463135" elapsed="0.123512"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.587621" level="INFO">${next} = 18233</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.586977" elapsed="0.000694"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.588892" level="INFO">${current_port} = 18233</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.588022" elapsed="0.000956"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.458950" elapsed="0.130147"/>
</kw>
<msg time="2026-08-15T23:56:02.589174" level="INFO">Repeating keyword, round 404/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.591441" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.591224" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.591183" elapsed="0.000387"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.592329" level="INFO">${current_Date} = 2026-08-15 23:56:02.592</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.591969" elapsed="0.000413"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.593115" level="INFO">${ellapsed_seconds} = 2627.745</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.592671" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.593577" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.593244" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.593220" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.590715" elapsed="0.003029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.594441" level="INFO">${number} = 404</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.593961" elapsed="0.000515"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.596388" level="INFO">${number} = 404</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.595916" elapsed="0.000509"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.598516" level="INFO">${device-port} = 18233</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.597696" elapsed="0.000901"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.601652" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.632477" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.632703" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.601547" elapsed="0.031216"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.633697" elapsed="0.000054"/>
</kw>
<msg time="2026-08-15T23:56:02.633861" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.632981" elapsed="0.000991">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.632930" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.601268" elapsed="0.033080">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.600868" elapsed="0.033699"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.635430" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18233 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.704094" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.704306" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.634947" elapsed="0.069414"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.704471" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:02.704917" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.600409" elapsed="0.104623"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.705588" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.599125" elapsed="0.107546"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.597240" elapsed="0.109671"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.596644" elapsed="0.110372"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.595311" elapsed="0.111829"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.594692" elapsed="0.112543"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.708395" level="INFO">${next} = 18234</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.707580" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.709705" level="INFO">${current_port} = 18234</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.708856" elapsed="0.001005"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.589567" elapsed="0.120431"/>
</kw>
<msg time="2026-08-15T23:56:02.710084" level="INFO">Repeating keyword, round 405/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.712612" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.712372" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.712329" elapsed="0.000425"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.713453" level="INFO">${current_Date} = 2026-08-15 23:56:02.713</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.713108" elapsed="0.000405"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.714559" level="INFO">${ellapsed_seconds} = 2627.624</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.713875" elapsed="0.000742"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.715333" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.714773" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.714731" elapsed="0.000777"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.711835" elapsed="0.003774"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.716840" level="INFO">${number} = 405</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.716033" elapsed="0.000837"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.718272" level="INFO">${number} = 405</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.717933" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.720285" level="INFO">${device-port} = 18234</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.719461" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.723049" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.756124" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.756348" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.722950" elapsed="0.033456"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.757331" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:02.757464" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.756578" elapsed="0.001070">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.756527" elapsed="0.001222">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.722650" elapsed="0.035406">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.722260" elapsed="0.035939"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.759063" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18234 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.824396" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.824625" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.758544" elapsed="0.066139"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.824837" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:02.825256" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.721840" elapsed="0.103529"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.825986" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.720833" elapsed="0.106249"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.719007" elapsed="0.108297"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.718459" elapsed="0.108949"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.717470" elapsed="0.110061"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.717026" elapsed="0.110603"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.828778" level="INFO">${next} = 18235</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.828021" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.830148" level="INFO">${current_port} = 18235</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.829255" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.710507" elapsed="0.119867"/>
</kw>
<msg time="2026-08-15T23:56:02.830459" level="INFO">Repeating keyword, round 406/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.833056" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.832776" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.832733" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.833987" level="INFO">${current_Date} = 2026-08-15 23:56:02.834</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.833604" elapsed="0.000442"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.835091" level="INFO">${ellapsed_seconds} = 2627.503</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.834383" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.835859" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.835369" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.835327" elapsed="0.000612"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.832241" elapsed="0.003744"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.836498" level="INFO">${number} = 406</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.836132" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.837945" level="INFO">${number} = 406</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.837593" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.839963" level="INFO">${device-port} = 18235</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.839132" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.842735" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.876547" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.876771" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.842638" elapsed="0.034228"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.877742" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:56:02.877912" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.877037" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.876989" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.842363" elapsed="0.036022">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.841966" elapsed="0.036627"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.879498" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18235 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:02.934203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.934436" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.878980" elapsed="0.055513"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:02.934608" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:02.935082" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.841493" elapsed="0.093701"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:02.935758" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.840492" elapsed="0.096409"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.838654" elapsed="0.098441"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.838132" elapsed="0.099062"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.837146" elapsed="0.100171"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.836680" elapsed="0.100731"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.938561" level="INFO">${next} = 18236</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.937759" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.940202" level="INFO">${current_port} = 18236</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:02.939060" elapsed="0.001241"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.830943" elapsed="0.109490"/>
</kw>
<msg time="2026-08-15T23:56:02.940519" level="INFO">Repeating keyword, round 407/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:02.943151" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:02.942872" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.942754" elapsed="0.000543"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.943898" level="INFO">${current_Date} = 2026-08-15 23:56:02.944</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:02.943630" elapsed="0.000295"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:02.944381" level="INFO">${ellapsed_seconds} = 2627.393</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:02.944075" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.944713" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:02.944478" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:02.944459" elapsed="0.000332"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:02.942264" elapsed="0.002598"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.945374" level="INFO">${number} = 407</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.945008" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.946827" level="INFO">${number} = 407</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.946464" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:02.948811" level="INFO">${device-port} = 18236</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:02.948014" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.951565" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:02.988298" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:02.988521" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.951468" elapsed="0.037112"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:02.989491" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:02.989624" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:02.988747" elapsed="0.001094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:02.988700" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:02.951193" elapsed="0.039027">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:02.950754" elapsed="0.039608"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:02.991302" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18236 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.060539" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.060748" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:02.990775" elapsed="0.070060"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.060953" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:03.061354" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:02.950337" elapsed="0.111128"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.062063" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:02.949334" elapsed="0.113844"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:02.947538" elapsed="0.115830"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:02.947020" elapsed="0.116450"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.946019" elapsed="0.117575"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:02.945554" elapsed="0.118138"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.064867" level="INFO">${next} = 18237</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.064077" elapsed="0.000854"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.066180" level="INFO">${current_port} = 18237</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.065293" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:02.941005" elapsed="0.125421"/>
</kw>
<msg time="2026-08-15T23:56:03.066517" level="INFO">Repeating keyword, round 408/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.069165" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.068896" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.068777" elapsed="0.000531"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.070106" level="INFO">${current_Date} = 2026-08-15 23:56:03.070</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.069722" elapsed="0.000444"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.071064" level="INFO">${ellapsed_seconds} = 2627.267</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.070573" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.071527" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.071201" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.071175" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.068283" elapsed="0.003418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.072437" level="INFO">${number} = 408</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.071926" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.074480" level="INFO">${number} = 408</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.073986" elapsed="0.000532"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.077344" level="INFO">${device-port} = 18237</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.076224" elapsed="0.001234"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.081788" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.112275" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.112508" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.081600" elapsed="0.030968"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.113515" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:03.113651" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.112748" elapsed="0.001013">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.112697" elapsed="0.001192">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.081098" elapsed="0.033078">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.080329" elapsed="0.034121"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.115331" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18237 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.180234" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.180462" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.114845" elapsed="0.065673"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.180637" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:03.181108" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.079680" elapsed="0.101537"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.181793" elapsed="0.001088"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.078100" elapsed="0.104979"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.075562" elapsed="0.107707"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.074823" elapsed="0.108550"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.073344" elapsed="0.110156"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.072696" elapsed="0.110903"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.184764" level="INFO">${next} = 18238</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.183993" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.186176" level="INFO">${current_port} = 18238</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.185246" elapsed="0.001029"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.067000" elapsed="0.119405"/>
</kw>
<msg time="2026-08-15T23:56:03.186494" level="INFO">Repeating keyword, round 409/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.189081" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.188827" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.188756" elapsed="0.000467"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.189939" level="INFO">${current_Date} = 2026-08-15 23:56:03.190</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.189549" elapsed="0.000493"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.190991" level="INFO">${ellapsed_seconds} = 2627.147</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.190376" elapsed="0.000651"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.191467" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.191125" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.191099" elapsed="0.000477"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.188265" elapsed="0.003373"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.192370" level="INFO">${number} = 409</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.191860" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.194401" level="INFO">${number} = 409</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.193910" elapsed="0.000529"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.197178" level="INFO">${device-port} = 18238</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.196070" elapsed="0.001222"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.202935" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.227946" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.228161" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.202833" elapsed="0.025386"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.229124" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:03.229257" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.228381" elapsed="0.001084">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.228337" elapsed="0.001226">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.202444" elapsed="0.027459">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.201856" elapsed="0.028207"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.230917" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18238 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.296134" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.296363" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.230409" elapsed="0.066012"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.296536" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:03.296986" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.201237" elapsed="0.095864"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.297698" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.197930" elapsed="0.100865"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.195422" elapsed="0.103607"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.194658" elapsed="0.104472"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.193272" elapsed="0.105982"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.192622" elapsed="0.106725"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.300503" level="INFO">${next} = 18239</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.299691" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.301931" level="INFO">${current_port} = 18239</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.300979" elapsed="0.001054"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.186983" elapsed="0.115179"/>
</kw>
<msg time="2026-08-15T23:56:03.302248" level="INFO">Repeating keyword, round 410/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.304015" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.303861" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.303833" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.304577" level="INFO">${current_Date} = 2026-08-15 23:56:03.304</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.304356" elapsed="0.000259"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.305280" level="INFO">${ellapsed_seconds} = 2627.033</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.304845" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.305771" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.305417" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.305392" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.303507" elapsed="0.002464"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.306697" level="INFO">${number} = 410</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.306179" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.308720" level="INFO">${number} = 410</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.308245" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.311550" level="INFO">${device-port} = 18239</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.310429" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.315380" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.348239" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.348477" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.315282" elapsed="0.033257"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.349500" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:03.349641" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.348713" elapsed="0.001035">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.348666" elapsed="0.001205">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.315004" elapsed="0.035147">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.314332" elapsed="0.036029"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.351270" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18239 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.420280" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.420504" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.350723" elapsed="0.069836"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.420675" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:03.421128" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.313427" elapsed="0.107835"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.421881" elapsed="0.000865"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.312311" elapsed="0.110669"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.309772" elapsed="0.113406"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.309004" elapsed="0.114275"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.307604" elapsed="0.115799"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.306976" elapsed="0.116524"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.424683" level="INFO">${next} = 18240</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.423919" elapsed="0.000833"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.426102" level="INFO">${current_port} = 18240</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.425206" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.302677" elapsed="0.123654"/>
</kw>
<msg time="2026-08-15T23:56:03.426418" level="INFO">Repeating keyword, round 411/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.429047" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.428753" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.428705" elapsed="0.000542"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.429896" level="INFO">${current_Date} = 2026-08-15 23:56:03.430</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.429580" elapsed="0.000356"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.430568" level="INFO">${ellapsed_seconds} = 2626.907</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.430144" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.431056" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.430704" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.430678" elapsed="0.000489"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.428208" elapsed="0.003022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.431961" level="INFO">${number} = 411</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.431432" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.433995" level="INFO">${number} = 411</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.433501" elapsed="0.000532"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.436721" level="INFO">${device-port} = 18240</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.435628" elapsed="0.001231"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.440639" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.472868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.473111" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.440504" elapsed="0.032667"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.474107" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:03.474245" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.473339" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.473292" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.440114" elapsed="0.034727">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.439461" elapsed="0.035529"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.475854" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18240 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.544601" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.544867" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.475341" elapsed="0.069585"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.545038" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:03.545437" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.438586" elapsed="0.106960"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.546146" elapsed="0.000876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.437484" elapsed="0.109727"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.435008" elapsed="0.112394"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.434256" elapsed="0.113246"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.432860" elapsed="0.114764"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.432216" elapsed="0.115502"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.548897" level="INFO">${next} = 18241</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.548103" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.550217" level="INFO">${current_port} = 18241</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.549322" elapsed="0.000992"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.426902" elapsed="0.123540"/>
</kw>
<msg time="2026-08-15T23:56:03.550529" level="INFO">Repeating keyword, round 412/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.553116" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.552866" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.552753" elapsed="0.000507"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.553924" level="INFO">${current_Date} = 2026-08-15 23:56:03.554</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.553664" elapsed="0.000287"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.554403" level="INFO">${ellapsed_seconds} = 2626.783</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.554101" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.554732" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.554500" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.554482" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.552262" elapsed="0.002614"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.555387" level="INFO">${number} = 412</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.555023" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.556840" level="INFO">${number} = 412</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.556476" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.558819" level="INFO">${device-port} = 18241</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.558013" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.561567" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.596465" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.596751" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.561469" elapsed="0.035384"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.597737" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:03.597907" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.597029" elapsed="0.000985">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.596981" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.561191" elapsed="0.037188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.560560" elapsed="0.038043"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.599480" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18241 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.664315" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.664542" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.598993" elapsed="0.065604"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.664707" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:03.665156" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.560150" elapsed="0.105117"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.665868" elapsed="0.000851"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.559343" elapsed="0.107615"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.557544" elapsed="0.109609"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.557029" elapsed="0.110225"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.556033" elapsed="0.111344"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.555568" elapsed="0.111905"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.668672" level="INFO">${next} = 18242</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.667861" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.670057" level="INFO">${current_port} = 18242</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.669156" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.550985" elapsed="0.119302"/>
</kw>
<msg time="2026-08-15T23:56:03.670506" level="INFO">Repeating keyword, round 413/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.672929" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.672758" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.672731" elapsed="0.000287"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.673433" level="INFO">${current_Date} = 2026-08-15 23:56:03.673</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.673220" elapsed="0.000250"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.674126" level="INFO">${ellapsed_seconds} = 2626.664</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.673682" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.674586" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.674260" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.674234" elapsed="0.000461"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.672233" elapsed="0.002525"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.675489" level="INFO">${number} = 413</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.674982" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.677530" level="INFO">${number} = 413</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.677059" elapsed="0.000508"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.680306" level="INFO">${device-port} = 18242</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.679196" elapsed="0.001241"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.683837" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.712486" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.712672" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.683722" elapsed="0.029009"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.713635" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:03.713767" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.712933" elapsed="0.001055">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.712886" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.683444" elapsed="0.030924">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.682852" elapsed="0.031657"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.715377" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18242 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.780263" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.780476" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.714890" elapsed="0.065641"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.780644" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:03.781116" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.682265" elapsed="0.098963"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.781827" elapsed="0.000848"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.681071" elapsed="0.101835"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.678540" elapsed="0.104559"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.677787" elapsed="0.105412"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.676407" elapsed="0.106915"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.675744" elapsed="0.107672"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.784562" level="INFO">${next} = 18243</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.783760" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.785930" level="INFO">${current_port} = 18243</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.785041" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.670979" elapsed="0.115177"/>
</kw>
<msg time="2026-08-15T23:56:03.786242" level="INFO">Repeating keyword, round 414/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.788887" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.788610" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.788568" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.789784" level="INFO">${current_Date} = 2026-08-15 23:56:03.790</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.789436" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.790924" level="INFO">${ellapsed_seconds} = 2626.547</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.790216" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.791662" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.791141" elapsed="0.000644"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.791100" elapsed="0.000772"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.788078" elapsed="0.003937"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.793004" level="INFO">${number} = 414</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.792354" elapsed="0.000677"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.794432" level="INFO">${number} = 414</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.794094" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.796475" level="INFO">${device-port} = 18243</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.795621" elapsed="0.000936"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.799253" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.832606" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.832892" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.799156" elapsed="0.033801"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.833854" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:03.833992" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.833122" elapsed="0.000976">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.833076" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.798870" elapsed="0.035589">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.798252" elapsed="0.036416"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.835534" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18243 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:03.900300" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.900510" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.835053" elapsed="0.065512"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:03.900674" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:03.901118" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.797835" elapsed="0.103391"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:03.901776" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.797029" elapsed="0.105844"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.795172" elapsed="0.107893"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.794636" elapsed="0.108528"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.793633" elapsed="0.109654"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.793187" elapsed="0.110194"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.904580" level="INFO">${next} = 18244</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.903789" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.906007" level="INFO">${current_port} = 18244</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:03.905069" elapsed="0.001039"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.786659" elapsed="0.119577"/>
</kw>
<msg time="2026-08-15T23:56:03.906323" level="INFO">Repeating keyword, round 415/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:03.908868" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:03.908597" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.908555" elapsed="0.000457"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.909669" level="INFO">${current_Date} = 2026-08-15 23:56:03.910</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:03.909334" elapsed="0.000395"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:03.910768" level="INFO">${ellapsed_seconds} = 2626.427</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:03.910092" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.911549" elapsed="0.000093"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:03.911027" elapsed="0.000694"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:03.910984" elapsed="0.000792"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:03.908068" elapsed="0.003884"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.912945" level="INFO">${number} = 415</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.912285" elapsed="0.000687"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.914381" level="INFO">${number} = 415</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.914040" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:03.916442" level="INFO">${device-port} = 18244</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:03.915597" elapsed="0.000931"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.919257" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:03.949357" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:03.949573" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.919139" elapsed="0.030492"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:03.950537" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:03.950669" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:03.949831" elapsed="0.001051">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:03.949751" elapsed="0.001233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:03.918855" elapsed="0.032403">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:03.918234" elapsed="0.033166"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:03.952287" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18244 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.016608" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.016874" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:03.951773" elapsed="0.065174"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.017060" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:04.017476" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:03.917796" elapsed="0.099793"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.018217" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:03.916998" elapsed="0.102372"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:03.915107" elapsed="0.104467"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:03.914567" elapsed="0.105112"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.913576" elapsed="0.106277"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:03.913128" elapsed="0.106854"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.021174" level="INFO">${next} = 18245</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.020339" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.022561" level="INFO">${current_port} = 18245</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.021604" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:03.906739" elapsed="0.116055"/>
</kw>
<msg time="2026-08-15T23:56:04.022970" level="INFO">Repeating keyword, round 416/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.024840" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.024666" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.024639" elapsed="0.000293"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.025409" level="INFO">${current_Date} = 2026-08-15 23:56:04.025</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.025186" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.026114" level="INFO">${ellapsed_seconds} = 2626.312</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.025663" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.026575" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.026249" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.026223" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.024337" elapsed="0.002418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.027541" level="INFO">${number} = 416</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.026984" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.029575" level="INFO">${number} = 416</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.029098" elapsed="0.000515"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.032465" level="INFO">${device-port} = 18245</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.031294" elapsed="0.001285"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.036329" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.068348" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.068576" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.036224" elapsed="0.032412"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.069579" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:04.069733" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.068842" elapsed="0.001042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.068756" elapsed="0.001224">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.035936" elapsed="0.034317">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.035025" elapsed="0.035451"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.071410" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18245 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.140237" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.140480" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.070867" elapsed="0.069669"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.140657" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:04.141148" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.034398" elapsed="0.106860"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.141895" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.033244" elapsed="0.109865"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.030583" elapsed="0.112718"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.029854" elapsed="0.113548"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.028452" elapsed="0.115074"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.027797" elapsed="0.115827"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.144895" level="INFO">${next} = 18246</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.144042" elapsed="0.000922"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.146273" level="INFO">${current_port} = 18246</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.145336" elapsed="0.001042"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.023455" elapsed="0.123057"/>
</kw>
<msg time="2026-08-15T23:56:04.146603" level="INFO">Repeating keyword, round 417/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.148505" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.148391" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.148369" elapsed="0.000203"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.148901" level="INFO">${current_Date} = 2026-08-15 23:56:04.149</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.148721" elapsed="0.000209"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.149404" level="INFO">${ellapsed_seconds} = 2626.188</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.149081" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.149754" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.149504" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.149484" elapsed="0.000369"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.148142" elapsed="0.001759"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.150424" level="INFO">${number} = 417</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.150051" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.151928" level="INFO">${number} = 417</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.151563" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.153979" level="INFO">${device-port} = 18246</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.153156" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.156861" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.192698" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.193092" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.156725" elapsed="0.036431"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.194299" elapsed="0.000071"/>
</kw>
<msg time="2026-08-15T23:56:04.194453" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.193394" elapsed="0.001310">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.193325" elapsed="0.001526">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.156443" elapsed="0.038724">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.155831" elapsed="0.039486"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.196266" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18246 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.260214" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.260482" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.195708" elapsed="0.064833"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.260700" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:56:04.261229" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.155385" elapsed="0.105958"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.262007" elapsed="0.001101"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.154513" elapsed="0.108795"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.152647" elapsed="0.110886"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.152115" elapsed="0.111527"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.151101" elapsed="0.112670"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.150609" elapsed="0.113339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.265325" level="INFO">${next} = 18247</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.264367" elapsed="0.001026"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.266793" level="INFO">${current_port} = 18247</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.265772" elapsed="0.001199"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.147206" elapsed="0.119904"/>
</kw>
<msg time="2026-08-15T23:56:04.267200" level="INFO">Repeating keyword, round 418/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.270068" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.269760" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.269714" elapsed="0.000519"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.271220" level="INFO">${current_Date} = 2026-08-15 23:56:04.271</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.270782" elapsed="0.000501"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.272127" level="INFO">${ellapsed_seconds} = 2626.066</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.271653" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.272493" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.272227" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.272208" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.269208" elapsed="0.003423"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.273183" level="INFO">${number} = 418</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.272783" elapsed="0.000454"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.274788" level="INFO">${number} = 418</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.274401" elapsed="0.000433"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.276886" level="INFO">${device-port} = 18247</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.276067" elapsed="0.000903"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.279743" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.316500" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.316653" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.279635" elapsed="0.037056"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.317301" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:04.317388" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.316834" elapsed="0.000625">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.316777" elapsed="0.000742">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.279354" elapsed="0.038354">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.278686" elapsed="0.039187"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.318433" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18247 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.384403" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.384675" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.318102" elapsed="0.066633"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.384912" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:04.385366" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.278251" elapsed="0.107228"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.386122" elapsed="0.000993"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.277422" elapsed="0.109885"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.275583" elapsed="0.111920"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.275000" elapsed="0.112608"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.273900" elapsed="0.113839"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.273404" elapsed="0.114483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.389083" level="INFO">${next} = 18248</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.388248" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.390559" level="INFO">${current_port} = 18248</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.389510" elapsed="0.001163"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.267695" elapsed="0.123074"/>
</kw>
<msg time="2026-08-15T23:56:04.390874" level="INFO">Repeating keyword, round 419/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.392539" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.392379" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.392349" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.393251" level="INFO">${current_Date} = 2026-08-15 23:56:04.393</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.392954" elapsed="0.000336"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.394025" level="INFO">${ellapsed_seconds} = 2625.944</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.393503" elapsed="0.000559"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.394563" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.394212" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.394182" elapsed="0.000491"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.392035" elapsed="0.002702"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.395479" level="INFO">${number} = 419</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.394964" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.397579" level="INFO">${number} = 419</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.397092" elapsed="0.000524"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.400417" level="INFO">${device-port} = 18248</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.399296" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.404352" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.436150" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.436293" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.404204" elapsed="0.032127"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.436923" elapsed="0.000042"/>
</kw>
<msg time="2026-08-15T23:56:04.437016" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.436438" elapsed="0.000718">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.436408" elapsed="0.000811">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.403786" elapsed="0.033622">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.402922" elapsed="0.034576"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.438061" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18248 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.504356" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.504567" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.437716" elapsed="0.066907"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.504732" elapsed="0.000109"/>
</return>
<msg time="2026-08-15T23:56:04.505182" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.402316" elapsed="0.102976"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.505940" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.401174" elapsed="0.105870"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.398637" elapsed="0.108598"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.397865" elapsed="0.109470"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.396393" elapsed="0.111065"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.395738" elapsed="0.111813"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.508732" level="INFO">${next} = 18249</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.507972" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.510170" level="INFO">${current_port} = 18249</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.509237" elapsed="0.001032"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.391178" elapsed="0.119221"/>
</kw>
<msg time="2026-08-15T23:56:04.510483" level="INFO">Repeating keyword, round 420/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.513105" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.512857" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.512785" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.514097" level="INFO">${current_Date} = 2026-08-15 23:56:04.514</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.513665" elapsed="0.000492"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.514998" level="INFO">${ellapsed_seconds} = 2625.823</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.514490" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.515328" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.515094" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.515076" elapsed="0.000330"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.512297" elapsed="0.003156"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.515979" level="INFO">${number} = 420</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.515598" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.517410" level="INFO">${number} = 420</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.517070" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.519406" level="INFO">${device-port} = 18249</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.518601" elapsed="0.000886"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.522184" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.556426" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.556662" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.522081" elapsed="0.034643"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.557732" elapsed="0.000090"/>
</kw>
<msg time="2026-08-15T23:56:04.557910" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.556934" elapsed="0.001084">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.556886" elapsed="0.001227">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.521762" elapsed="0.036626">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.521173" elapsed="0.037424"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.559528" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18249 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.624416" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.624652" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.559026" elapsed="0.065682"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.624877" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:04.625332" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.520740" elapsed="0.104739"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.626146" elapsed="0.000963"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.519957" elapsed="0.107352"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.518153" elapsed="0.109351"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.517600" elapsed="0.110007"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.516604" elapsed="0.111132"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.516160" elapsed="0.111736"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.629132" level="INFO">${next} = 18250</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.628281" elapsed="0.000913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.630557" level="INFO">${current_port} = 18250</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.629603" elapsed="0.001052"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.510996" elapsed="0.119900"/>
</kw>
<msg time="2026-08-15T23:56:04.631000" level="INFO">Repeating keyword, round 421/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.633763" elapsed="0.000052"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.633346" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.633289" elapsed="0.000593"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.634204" level="INFO">${current_Date} = 2026-08-15 23:56:04.634</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.634037" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.634699" level="INFO">${ellapsed_seconds} = 2625.703</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.634382" elapsed="0.000343"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.635059" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.634811" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.634777" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.632768" elapsed="0.002417"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.635698" level="INFO">${number} = 421</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.635331" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.637159" level="INFO">${number} = 421</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.636817" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.639168" level="INFO">${device-port} = 18250</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.638379" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.643631" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.676066" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.676165" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.643526" elapsed="0.032665"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.676584" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:56:04.676643" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.676266" elapsed="0.000469">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.676245" elapsed="0.000534">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.643249" elapsed="0.033680">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.640917" elapsed="0.036076"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.677380" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18250 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.748535" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.748768" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.677148" elapsed="0.071721"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.748983" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:56:04.749441" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.640486" elapsed="0.109065"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.750155" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.639684" elapsed="0.111549"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.637928" elapsed="0.113492"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.637344" elapsed="0.114175"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.636355" elapsed="0.115285"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.635899" elapsed="0.115834"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.753001" level="INFO">${next} = 18251</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.752117" elapsed="0.001014"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.754407" level="INFO">${current_port} = 18251</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.753511" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.631447" elapsed="0.123185"/>
</kw>
<msg time="2026-08-15T23:56:04.754716" level="INFO">Repeating keyword, round 422/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.757407" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.757022" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.756979" elapsed="0.000575"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.758085" level="INFO">${current_Date} = 2026-08-15 23:56:04.758</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.757919" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.758576" level="INFO">${ellapsed_seconds} = 2625.579</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.758261" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.758928" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.758672" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.758653" elapsed="0.000357"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.756465" elapsed="0.002590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.759565" level="INFO">${number} = 422</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.759201" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.761009" level="INFO">${number} = 422</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.760657" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.763066" level="INFO">${device-port} = 18251</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.762242" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.765887" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.800528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.800747" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.765769" elapsed="0.035069"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.801751" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:56:04.801920" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.801052" elapsed="0.000973">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.801002" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.765485" elapsed="0.036905">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.764832" elapsed="0.037766"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.803464" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18251 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.868179" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.868391" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.802982" elapsed="0.065465"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.868558" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:04.869100" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.764405" elapsed="0.104808"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.869770" elapsed="0.000896"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.763597" elapsed="0.107298"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.761758" elapsed="0.109332"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.761215" elapsed="0.109974"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.760217" elapsed="0.111095"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.759753" elapsed="0.111655"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.872545" level="INFO">${next} = 18252</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.871754" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.873935" level="INFO">${current_port} = 18252</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:04.873042" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.755210" elapsed="0.119134"/>
</kw>
<msg time="2026-08-15T23:56:04.874433" level="INFO">Repeating keyword, round 423/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:04.877051" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:04.876760" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.876652" elapsed="0.000543"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.877867" level="INFO">${current_Date} = 2026-08-15 23:56:04.878</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:04.877519" elapsed="0.000382"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:04.878352" level="INFO">${ellapsed_seconds} = 2625.459</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:04.878051" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.878681" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:04.878448" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:04.878430" elapsed="0.000329"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:04.876163" elapsed="0.002656"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.879345" level="INFO">${number} = 423</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.878967" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.880861" level="INFO">${number} = 423</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.880465" elapsed="0.000424"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:04.882841" level="INFO">${device-port} = 18252</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:04.882040" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.885578" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:04.920610" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.920872" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.885480" elapsed="0.035454"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:04.921797" elapsed="0.000090"/>
</kw>
<msg time="2026-08-15T23:56:04.921965" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:04.921099" elapsed="0.001056">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:04.921052" elapsed="0.001202">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:04.885199" elapsed="0.037327">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:04.884582" elapsed="0.038085"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:04.923529" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18252 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:04.996734" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:04.996982" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:04.923047" elapsed="0.073998"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:04.997159" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:04.997571" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:04.884170" elapsed="0.113512"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:04.998293" elapsed="0.000871"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:04.883364" elapsed="0.115988"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:04.881565" elapsed="0.117974"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:04.881049" elapsed="0.118589"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.880017" elapsed="0.119744"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:04.879527" elapsed="0.120377"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.001067" level="INFO">${next} = 18253</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.000251" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.002377" level="INFO">${current_port} = 18253</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.001487" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:04.874912" elapsed="0.127687"/>
</kw>
<msg time="2026-08-15T23:56:05.002682" level="INFO">Repeating keyword, round 424/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.005091" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.004938" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.004911" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.005644" level="INFO">${current_Date} = 2026-08-15 23:56:05.006</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.005430" elapsed="0.000250"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.006332" level="INFO">${ellapsed_seconds} = 2625.331</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.005908" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.006792" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.006466" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.006441" elapsed="0.000490"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.004462" elapsed="0.002534"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.007720" level="INFO">${number} = 424</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.007201" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.009773" level="INFO">${number} = 424</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.009298" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.012579" level="INFO">${device-port} = 18253</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.011440" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.016526" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.048267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.048493" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.016379" elapsed="0.032173"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.049468" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:05.049603" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.048721" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.048674" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.015602" elapsed="0.034505">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.015062" elapsed="0.035255"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.051185" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18253 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.126463" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.126680" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.050669" elapsed="0.076067"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.126888" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:05.127294" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.014452" elapsed="0.112950"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.128024" elapsed="0.000885"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.013336" elapsed="0.115762"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.010781" elapsed="0.118505"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.010053" elapsed="0.119333"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.008657" elapsed="0.120854"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.007996" elapsed="0.121611"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.130744" level="INFO">${next} = 18254</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.129997" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.132137" level="INFO">${current_port} = 18254</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.131215" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.003165" elapsed="0.129198"/>
</kw>
<msg time="2026-08-15T23:56:05.132449" level="INFO">Repeating keyword, round 425/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.135025" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.134746" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.134704" elapsed="0.000467"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.135880" level="INFO">${current_Date} = 2026-08-15 23:56:05.136</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.135507" elapsed="0.000435"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.136970" level="INFO">${ellapsed_seconds} = 2625.201</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.136356" elapsed="0.000641"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.137300" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.137067" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.137048" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.134219" elapsed="0.003206"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.137955" level="INFO">${number} = 425</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.137571" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.139388" level="INFO">${number} = 425</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.139051" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.141369" level="INFO">${device-port} = 18254</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.140573" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.144108" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.179960" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.180064" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.143787" elapsed="0.036304"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.180484" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:56:05.180543" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.180167" elapsed="0.000461">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.180145" elapsed="0.000529">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.143512" elapsed="0.037462">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.143124" elapsed="0.037995"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.181986" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18254 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.248521" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.248737" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.181465" elapsed="0.067328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.248988" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:05.249403" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.142686" elapsed="0.106827"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.250170" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.141914" elapsed="0.109354"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.140130" elapsed="0.111327"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.139577" elapsed="0.111980"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.138584" elapsed="0.113124"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.138138" elapsed="0.113719"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.253065" level="INFO">${next} = 18255</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.252239" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.254407" level="INFO">${current_port} = 18255</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.253493" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.132963" elapsed="0.121672"/>
</kw>
<msg time="2026-08-15T23:56:05.254724" level="INFO">Repeating keyword, round 426/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.257336" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.257091" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.257048" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.258265" level="INFO">${current_Date} = 2026-08-15 23:56:05.258</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.257915" elapsed="0.000409"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.259370" level="INFO">${ellapsed_seconds} = 2625.079</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.258660" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.260279" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.259590" elapsed="0.000817"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.259549" elapsed="0.000913"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.256530" elapsed="0.004036"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.261264" level="INFO">${number} = 426</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.260891" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.262699" level="INFO">${number} = 426</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.262361" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.264715" level="INFO">${device-port} = 18255</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.263927" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.267248" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.300619" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.300880" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.267151" elapsed="0.033794"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.301846" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:05.301984" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.301112" elapsed="0.000978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.301066" elapsed="0.001115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.266879" elapsed="0.035572">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.266470" elapsed="0.036190"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.303530" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18255 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.376347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.376561" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.303043" elapsed="0.073574"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.376730" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:56:05.377177" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.266062" elapsed="0.111224"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.377881" elapsed="0.000838"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.265259" elapsed="0.113691"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.263417" elapsed="0.115725"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.262900" elapsed="0.116344"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.261913" elapsed="0.117487"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.261446" elapsed="0.118075"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.380658" level="INFO">${next} = 18256</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.379914" elapsed="0.000803"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.382017" level="INFO">${current_port} = 18256</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.381134" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.255237" elapsed="0.127006"/>
</kw>
<msg time="2026-08-15T23:56:05.382329" level="INFO">Repeating keyword, round 427/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.384241" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.384131" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.384111" elapsed="0.000194"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.384605" level="INFO">${current_Date} = 2026-08-15 23:56:05.385</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.384453" elapsed="0.000179"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.385108" level="INFO">${ellapsed_seconds} = 2624.952</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.384787" elapsed="0.000347"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.385438" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.385206" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.385186" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.383890" elapsed="0.001672"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.386094" level="INFO">${number} = 427</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.385708" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.387542" level="INFO">${number} = 427</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.387180" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.389507" level="INFO">${device-port} = 18256</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.388716" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.392194" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.427846" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.427952" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.391946" elapsed="0.036032"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.428366" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:56:05.428426" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.428052" elapsed="0.000459">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.428031" elapsed="0.000525">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.391644" elapsed="0.037035">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.391246" elapsed="0.037594"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.429675" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18256 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.496624" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.496874" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.429196" elapsed="0.067739"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.497047" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:05.497444" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.390835" elapsed="0.106719"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.498151" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.390045" elapsed="0.109200"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.388272" elapsed="0.111162"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.387738" elapsed="0.111796"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.386720" elapsed="0.112938"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.386276" elapsed="0.113481"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.500937" level="INFO">${next} = 18257</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.500144" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.502245" level="INFO">${current_port} = 18257</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.501360" elapsed="0.000981"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.382745" elapsed="0.119724"/>
</kw>
<msg time="2026-08-15T23:56:05.502556" level="INFO">Repeating keyword, round 428/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.505124" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.504878" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.504834" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.506039" level="INFO">${current_Date} = 2026-08-15 23:56:05.506</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.505662" elapsed="0.000437"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.507188" level="INFO">${ellapsed_seconds} = 2624.831</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.506430" elapsed="0.000819"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.507833" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.507409" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.507367" elapsed="0.000547"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.504321" elapsed="0.003647"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.508482" level="INFO">${number} = 428</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.508115" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.509934" level="INFO">${number} = 428</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.509576" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.511959" level="INFO">${device-port} = 18257</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.511147" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.514619" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.548062" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.548296" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.514520" elapsed="0.033836"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.549281" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:05.549416" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.548526" elapsed="0.000998">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.548479" elapsed="0.001164">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.514099" elapsed="0.035849">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.513691" elapsed="0.036467"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.551094" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18257 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.616316" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.616544" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.550513" elapsed="0.066090"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.616720" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:05.617178" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.513274" elapsed="0.104018"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.617922" elapsed="0.000932"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.512478" elapsed="0.106581"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.510634" elapsed="0.108620"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.510118" elapsed="0.109238"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.509128" elapsed="0.110352"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.508664" elapsed="0.110915"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.620776" level="INFO">${next} = 18258</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.620011" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.622153" level="INFO">${current_port} = 18258</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.621257" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.503061" elapsed="0.119321"/>
</kw>
<msg time="2026-08-15T23:56:05.622472" level="INFO">Repeating keyword, round 429/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.625105" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.624855" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.624782" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.625976" level="INFO">${current_Date} = 2026-08-15 23:56:05.626</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.625587" elapsed="0.000450"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.627139" level="INFO">${ellapsed_seconds} = 2624.711</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.626373" elapsed="0.000826"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.627886" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.627358" elapsed="0.000590"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.627315" elapsed="0.000658"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.624290" elapsed="0.003728"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.628530" level="INFO">${number} = 429</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.628165" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.629996" level="INFO">${number} = 429</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.629634" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.632032" level="INFO">${device-port} = 18258</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.631223" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.634730" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.668359" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.668577" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.634606" elapsed="0.034030"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.669583" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:05.669718" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.668861" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.668768" elapsed="0.001279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.634191" elapsed="0.036132">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.633782" elapsed="0.036684"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.671364" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18258 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.736476" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.736701" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.670876" elapsed="0.065881"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.736910" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:05.737329" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.633355" elapsed="0.104084"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.738058" elapsed="0.000946"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.632549" elapsed="0.106645"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.630741" elapsed="0.108645"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.630195" elapsed="0.109290"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.629185" elapsed="0.110422"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.628712" elapsed="0.110992"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.740888" level="INFO">${next} = 18259</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.740090" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.742207" level="INFO">${current_port} = 18259</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.741313" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.623006" elapsed="0.119480"/>
</kw>
<msg time="2026-08-15T23:56:05.742575" level="INFO">Repeating keyword, round 430/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.745222" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.744969" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.744916" elapsed="0.000449"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.746161" level="INFO">${current_Date} = 2026-08-15 23:56:05.746</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.745770" elapsed="0.000452"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.747132" level="INFO">${ellapsed_seconds} = 2624.591</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.746606" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.747599" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.747266" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.747241" elapsed="0.000468"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.744394" elapsed="0.003379"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.748514" level="INFO">${number} = 430</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.748006" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.750566" level="INFO">${number} = 430</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.750049" elapsed="0.000554"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.753392" level="INFO">${device-port} = 18259</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.752274" elapsed="0.001228"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.757283" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.788299" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.788524" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.757145" elapsed="0.031436"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.789492" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:05.789625" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.788746" elapsed="0.000985">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.788701" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.756656" elapsed="0.033480">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.755883" elapsed="0.034531"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.791293" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18259 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.856200" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.856408" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.790771" elapsed="0.065692"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.856573" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:05.857021" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.755278" elapsed="0.101851"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.857677" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.754135" elapsed="0.104640"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.751623" elapsed="0.107393"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.750891" elapsed="0.108226"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.749410" elapsed="0.109829"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.748765" elapsed="0.110568"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.860551" level="INFO">${next} = 18260</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.859674" elapsed="0.000937"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.861918" level="INFO">${current_port} = 18260</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.861026" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.743108" elapsed="0.119063"/>
</kw>
<msg time="2026-08-15T23:56:05.862259" level="INFO">Repeating keyword, round 431/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.864786" elapsed="0.000064"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.864533" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.864479" elapsed="0.000482"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.865636" level="INFO">${current_Date} = 2026-08-15 23:56:05.865</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.865295" elapsed="0.000400"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.866756" level="INFO">${ellapsed_seconds} = 2624.472</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.866108" elapsed="0.000684"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.867257" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.866924" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.866889" elapsed="0.000478"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.863994" elapsed="0.003436"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.868162" level="INFO">${number} = 431</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.867632" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.870208" level="INFO">${number} = 431</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.869679" elapsed="0.000566"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.873011" level="INFO">${device-port} = 18260</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.871888" elapsed="0.001237"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.877009" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:05.908358" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.908582" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.876755" elapsed="0.031887"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.909594" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:05.909728" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:05.908874" elapsed="0.001095">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:05.908779" elapsed="0.001301">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.876369" elapsed="0.033986">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.875489" elapsed="0.035006"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.911366" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18260 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:05.976272" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:05.976496" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.910879" elapsed="0.065674"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:05.976669" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:05.977118" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.874908" elapsed="0.102326"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:05.977869" elapsed="0.000869"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.873735" elapsed="0.105245"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.871226" elapsed="0.107951"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.870472" elapsed="0.108806"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.869054" elapsed="0.110347"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.868414" elapsed="0.111081"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.980646" level="INFO">${next} = 18261</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.979882" elapsed="0.000825"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.982066" level="INFO">${current_port} = 18261</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:05.981144" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.862682" elapsed="0.119613"/>
</kw>
<msg time="2026-08-15T23:56:05.982381" level="INFO">Repeating keyword, round 432/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:05.985316" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:05.985052" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.985007" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.986343" level="INFO">${current_Date} = 2026-08-15 23:56:05.986</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:05.985966" elapsed="0.000439"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:05.987529" level="INFO">${ellapsed_seconds} = 2624.351</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:05.986763" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:05.988354" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:05.987762" elapsed="0.000725"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:05.987719" elapsed="0.000826"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:05.984451" elapsed="0.004204"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.989996" level="INFO">${number} = 432</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.989039" elapsed="0.001023"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.993497" level="INFO">${number} = 432</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.992653" elapsed="0.000907"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:05.996291" level="INFO">${device-port} = 18261</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:05.995501" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:05.999045" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.028362" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.028588" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:05.998946" elapsed="0.029700"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.029553" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:06.029721" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.028848" elapsed="0.001013">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.028766" elapsed="0.001192">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:05.998644" elapsed="0.031586">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:05.998083" elapsed="0.032355"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.031310" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18261 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.096352" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.096563" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.030789" elapsed="0.065830"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.096730" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:56:06.097172" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:05.997612" elapsed="0.099669"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.097927" elapsed="0.000861"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:05.996822" elapsed="0.102212"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:05.995054" elapsed="0.104169"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:05.994038" elapsed="0.105284"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.991545" elapsed="0.107899"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:05.990437" elapsed="0.109102"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.100699" level="INFO">${next} = 18262</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.099955" elapsed="0.000803"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.102099" level="INFO">${current_port} = 18262</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.101170" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:05.983082" elapsed="0.119245"/>
</kw>
<msg time="2026-08-15T23:56:06.102413" level="INFO">Repeating keyword, round 433/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.105038" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.104748" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.104694" elapsed="0.000488"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.105953" level="INFO">${current_Date} = 2026-08-15 23:56:06.106</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.105631" elapsed="0.000349"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.106435" level="INFO">${ellapsed_seconds} = 2624.231</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.106132" elapsed="0.000329"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.106772" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.106533" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.106514" elapsed="0.000361"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.104151" elapsed="0.002770"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.107435" level="INFO">${number} = 433</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.107067" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.108876" level="INFO">${number} = 433</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.108524" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.110912" level="INFO">${device-port} = 18262</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.110100" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.115735" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.147945" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.148180" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.115633" elapsed="0.032606"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.149185" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:06.149324" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.148408" elapsed="0.001203">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.148362" elapsed="0.001362">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.115343" elapsed="0.034698">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.112653" elapsed="0.037536"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.151081" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18262 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.219934" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.220144" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.150539" elapsed="0.069658"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.220307" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:06.220703" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.112240" elapsed="0.108621"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.221484" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.111430" elapsed="0.111167"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.109623" elapsed="0.113161"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.109065" elapsed="0.113896"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.108077" elapsed="0.115018"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.107617" elapsed="0.115578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.224362" level="INFO">${next} = 18263</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.223545" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.225726" level="INFO">${current_port} = 18263</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.224779" elapsed="0.001119"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.102888" elapsed="0.123147"/>
</kw>
<msg time="2026-08-15T23:56:06.226120" level="INFO">Repeating keyword, round 434/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.228564" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.228324" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.228284" elapsed="0.000421"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.229522" level="INFO">${current_Date} = 2026-08-15 23:56:06.229</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.229118" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.230158" level="INFO">${ellapsed_seconds} = 2624.108</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.229851" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.230491" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.230254" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.230235" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.227778" elapsed="0.002837"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.231145" level="INFO">${number} = 434</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.230760" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.232569" level="INFO">${number} = 434</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.232230" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.234602" level="INFO">${device-port} = 18263</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.233772" elapsed="0.000914"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.237463" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.267916" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.268142" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.237361" elapsed="0.030839"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.269126" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:06.269272" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.268366" elapsed="0.001014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.268320" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.236880" elapsed="0.032870">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.236440" elapsed="0.033555"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.270879" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18263 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.336283" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.336508" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.270347" elapsed="0.066218"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.336680" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:06.337194" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.236024" elapsed="0.101284"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.337915" elapsed="0.000859"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.235183" elapsed="0.103819"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.233324" elapsed="0.105871"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.232755" elapsed="0.106542"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.231771" elapsed="0.107653"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.231325" elapsed="0.108197"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.340675" level="INFO">${next} = 18264</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.339911" elapsed="0.000825"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.342002" level="INFO">${current_port} = 18264</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.341200" elapsed="0.000863"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.226538" elapsed="0.115606"/>
</kw>
<msg time="2026-08-15T23:56:06.342200" level="INFO">Repeating keyword, round 435/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.343761" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.343608" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.343582" elapsed="0.000317"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.344322" level="INFO">${current_Date} = 2026-08-15 23:56:06.344</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.344105" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.345051" level="INFO">${ellapsed_seconds} = 2623.993</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.344566" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.345519" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.345189" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.345163" elapsed="0.000466"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.343278" elapsed="0.002416"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.346433" level="INFO">${number} = 435</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.345921" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.348451" level="INFO">${number} = 435</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.347978" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.351287" level="INFO">${device-port} = 18264</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.350154" elapsed="0.001245"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.354919" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.388231" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.388453" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.354544" elapsed="0.033967"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.389437" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:06.389570" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.388674" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.388630" elapsed="0.001256">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.354267" elapsed="0.035902">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.353856" elapsed="0.036454"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.391170" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18264 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.456228" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.456440" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.390656" elapsed="0.065838"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.456627" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:06.457071" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.353213" elapsed="0.103970"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.457737" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.352041" elapsed="0.106817"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.349501" elapsed="0.109557"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.348711" elapsed="0.110447"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.347335" elapsed="0.111948"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.346686" elapsed="0.112691"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.460510" level="INFO">${next} = 18265</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.459722" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.461895" level="INFO">${current_port} = 18265</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.461006" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.342467" elapsed="0.119654"/>
</kw>
<msg time="2026-08-15T23:56:06.462204" level="INFO">Repeating keyword, round 436/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.464750" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.464454" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.464412" elapsed="0.000515"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.465665" level="INFO">${current_Date} = 2026-08-15 23:56:06.465</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.465319" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.466285" level="INFO">${ellapsed_seconds} = 2623.872</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.465980" elapsed="0.000331"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.466614" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.466381" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.466363" elapsed="0.000329"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.463928" elapsed="0.002809"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.467260" level="INFO">${number} = 436</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.466897" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.468699" level="INFO">${number} = 436</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.468340" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.470727" level="INFO">${device-port} = 18265</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.469962" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.473348" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.504205" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.504434" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.473245" elapsed="0.031279"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.505505" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:06.505645" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.504698" elapsed="0.001055">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.504649" elapsed="0.001250">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.472969" elapsed="0.033216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.472529" elapsed="0.033907"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.507349" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18265 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.572164" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.572397" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.506846" elapsed="0.065611"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.572570" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:06.573032" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.472114" elapsed="0.101029"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.573702" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.471280" elapsed="0.103565"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.469489" elapsed="0.105590"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.468958" elapsed="0.106223"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.467899" elapsed="0.107406"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.467441" elapsed="0.107961"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.576607" level="INFO">${next} = 18266</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.575748" elapsed="0.000921"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.578060" level="INFO">${current_port} = 18266</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.577123" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.462624" elapsed="0.115667"/>
</kw>
<msg time="2026-08-15T23:56:06.578377" level="INFO">Repeating keyword, round 437/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.580986" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.580859" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.580796" elapsed="0.000254"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.581352" level="INFO">${current_Date} = 2026-08-15 23:56:06.581</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.581200" elapsed="0.000179"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.581845" level="INFO">${ellapsed_seconds} = 2623.756</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.581526" elapsed="0.000347"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.582175" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.581944" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.581924" elapsed="0.000330"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.580115" elapsed="0.002184"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.582844" level="INFO">${number} = 437</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.582444" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.584378" level="INFO">${number} = 437</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.584005" elapsed="0.000402"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.586421" level="INFO">${device-port} = 18266</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.585586" elapsed="0.000916"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.590160" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.624488" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.624645" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.589696" elapsed="0.034988"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.625296" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:56:06.625381" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.624822" elapsed="0.000700">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.624766" elapsed="0.000819">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.589034" elapsed="0.036732">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.588230" elapsed="0.037650"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.626424" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18266 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.692484" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.692687" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.626113" elapsed="0.066618"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.692856" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:06.693207" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.587780" elapsed="0.105502"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.693707" elapsed="0.000678"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.586975" elapsed="0.107548"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.585131" elapsed="0.109537"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.584567" elapsed="0.110174"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.583512" elapsed="0.111335"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.583033" elapsed="0.111883"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.695662" level="INFO">${next} = 18267</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.695151" elapsed="0.000550"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.696608" level="INFO">${current_port} = 18267</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.695971" elapsed="0.000699"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.578848" elapsed="0.117907"/>
</kw>
<msg time="2026-08-15T23:56:06.696841" level="INFO">Repeating keyword, round 438/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.698471" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.698314" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.698285" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.699087" level="INFO">${current_Date} = 2026-08-15 23:56:06.699</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.698856" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.699795" level="INFO">${ellapsed_seconds} = 2623.638</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.699339" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.700342" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.699947" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.699923" elapsed="0.000530"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.697991" elapsed="0.002526"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.701236" level="INFO">${number} = 438</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.700731" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.703202" level="INFO">${number} = 438</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.702708" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.705981" level="INFO">${device-port} = 18267</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.704861" elapsed="0.001230"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.709124" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.744931" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.745194" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.708955" elapsed="0.036282"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.746009" elapsed="0.000042"/>
</kw>
<msg time="2026-08-15T23:56:06.746106" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.745401" elapsed="0.000780">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.745352" elapsed="0.000893">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.708462" elapsed="0.037981">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.708044" elapsed="0.038583"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.747363" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18267 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.816439" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.816672" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.746931" elapsed="0.069800"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.816889" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:06.817349" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.707587" elapsed="0.109873"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.818092" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.706713" elapsed="0.112543"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.704231" elapsed="0.115224"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.703449" elapsed="0.116112"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.702111" elapsed="0.117578"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.701487" elapsed="0.118366"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.821052" level="INFO">${next} = 18268</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.820214" elapsed="0.000898"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.822401" level="INFO">${current_port} = 18268</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.821482" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.697147" elapsed="0.125481"/>
</kw>
<msg time="2026-08-15T23:56:06.822717" level="INFO">Repeating keyword, round 439/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.825357" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.825108" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.825064" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.826235" level="INFO">${current_Date} = 2026-08-15 23:56:06.826</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.825870" elapsed="0.000427"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.827365" level="INFO">${ellapsed_seconds} = 2623.511</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.826631" elapsed="0.000793"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.828215" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.827581" elapsed="0.000758"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.827539" elapsed="0.000853"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.824539" elapsed="0.003955"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.829238" level="INFO">${number} = 439</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.828855" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.830686" level="INFO">${number} = 439</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.830339" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.832708" level="INFO">${device-port} = 18268</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.831910" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.835531" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.863856" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.864084" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.835264" elapsed="0.028879"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.865057" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:06.865195" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.864309" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.864262" elapsed="0.001240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.834913" elapsed="0.030874">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.834494" elapsed="0.031471"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.866836" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18268 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:06.932302" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.932530" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.866320" elapsed="0.066268"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:06.932705" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:06.933159" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.834075" elapsed="0.099195"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:06.933877" elapsed="0.000863"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.833263" elapsed="0.101706"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.831425" elapsed="0.103734"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.830885" elapsed="0.104374"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.829887" elapsed="0.105495"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.829421" elapsed="0.106084"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.936662" level="INFO">${next} = 18269</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.935901" elapsed="0.000822"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.938035" level="INFO">${current_port} = 18269</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:06.937140" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.823220" elapsed="0.115044"/>
</kw>
<msg time="2026-08-15T23:56:06.938350" level="INFO">Repeating keyword, round 440/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:06.940529" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:06.940375" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.940347" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.941121" level="INFO">${current_Date} = 2026-08-15 23:56:06.941</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:06.940900" elapsed="0.000259"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:06.941798" level="INFO">${ellapsed_seconds} = 2623.396</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:06.941369" elapsed="0.000489"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.942293" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:06.941957" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:06.941932" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:06.940038" elapsed="0.002479"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.943281" level="INFO">${number} = 440</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.942733" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.945412" level="INFO">${number} = 440</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.944917" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:06.948279" level="INFO">${device-port} = 18269</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:06.947124" elapsed="0.001278"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.952167" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:06.983749" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:06.984017" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.952057" elapsed="0.032022"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:06.985000" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:06.985141" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:06.984249" elapsed="0.001000">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:06.984203" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:06.951337" elapsed="0.034281">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:06.950768" elapsed="0.035097"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:06.986724" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18269 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.051903" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.052120" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:06.986228" elapsed="0.065948"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.052287" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:07.052687" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:06.950181" elapsed="0.102616"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.053402" elapsed="0.000866"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:06.949054" elapsed="0.105402"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:06.946426" elapsed="0.108225"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:06.945672" elapsed="0.109079"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.944273" elapsed="0.110649"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:06.943600" elapsed="0.111419"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.056194" level="INFO">${next} = 18270</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.055401" elapsed="0.000854"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.057539" level="INFO">${current_port} = 18270</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.056632" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:06.938774" elapsed="0.118990"/>
</kw>
<msg time="2026-08-15T23:56:07.057918" level="INFO">Repeating keyword, round 441/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.060514" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.060246" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.060187" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.061406" level="INFO">${current_Date} = 2026-08-15 23:56:07.061</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.061039" elapsed="0.000427"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.062504" level="INFO">${ellapsed_seconds} = 2623.276</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.061824" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.063390" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.062741" elapsed="0.000777"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.062678" elapsed="0.000893"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.059642" elapsed="0.004030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.064333" level="INFO">${number} = 441</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.063961" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.065763" level="INFO">${number} = 441</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.065422" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.067749" level="INFO">${device-port} = 18270</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.066953" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.070452" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.100188" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.100347" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.070349" elapsed="0.030039"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.101019" elapsed="0.000040"/>
</kw>
<msg time="2026-08-15T23:56:07.101112" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.100499" elapsed="0.000747">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.100465" elapsed="0.000852">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.069931" elapsed="0.031580">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.069512" elapsed="0.032101"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.102114" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18270 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.168093" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.168386" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.101873" elapsed="0.066573"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.168583" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:56:07.169101" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.069081" elapsed="0.100134"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.169869" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.068281" elapsed="0.102759"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.066482" elapsed="0.104754"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.065963" elapsed="0.105378"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.064969" elapsed="0.106499"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.064512" elapsed="0.107054"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.172744" level="INFO">${next} = 18271</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.171962" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.174155" level="INFO">${current_port} = 18271</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.173240" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.058340" elapsed="0.116043"/>
</kw>
<msg time="2026-08-15T23:56:07.174473" level="INFO">Repeating keyword, round 442/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.176651" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.176484" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.176457" elapsed="0.000286"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.177274" level="INFO">${current_Date} = 2026-08-15 23:56:07.177</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.177041" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.177989" level="INFO">${ellapsed_seconds} = 2623.16</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.177522" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.178475" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.178127" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.178101" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.176140" elapsed="0.002511"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.179407" level="INFO">${number} = 442</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.178879" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.181486" level="INFO">${number} = 442</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.180995" elapsed="0.000529"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.184404" level="INFO">${device-port} = 18271</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.183287" elapsed="0.001231"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.188211" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.219739" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.219996" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.188105" elapsed="0.031952"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.220995" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:07.221136" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.220222" elapsed="0.001024">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.220177" elapsed="0.001160">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.187743" elapsed="0.033875">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.186905" elapsed="0.034952"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.222698" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18271 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.287881" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.288093" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.222218" elapsed="0.065930"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.288259" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:07.288659" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.186298" elapsed="0.102469"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.289366" elapsed="0.000871"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.185169" elapsed="0.105257"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.182512" elapsed="0.108101"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.181753" elapsed="0.108999"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.180345" elapsed="0.110593"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.179661" elapsed="0.111375"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.292171" level="INFO">${next} = 18272</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.291382" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.293503" level="INFO">${current_port} = 18272</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.292599" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.175045" elapsed="0.118681"/>
</kw>
<msg time="2026-08-15T23:56:07.293874" level="INFO">Repeating keyword, round 443/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.296172" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.296064" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.296044" elapsed="0.000192"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.296530" level="INFO">${current_Date} = 2026-08-15 23:56:07.296</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.296378" elapsed="0.000179"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.297028" level="INFO">${ellapsed_seconds} = 2623.041</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.296703" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.297357" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.297125" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.297106" elapsed="0.000330"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.295688" elapsed="0.001792"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.298008" level="INFO">${number} = 443</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.297624" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.299503" level="INFO">${number} = 443</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.299157" elapsed="0.000374"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.301557" level="INFO">${device-port} = 18272</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.300747" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.304375" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.340172" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.340393" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.304271" elapsed="0.036181"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.341425" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:07.341559" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.340620" elapsed="0.001120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.340573" elapsed="0.001298">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.303997" elapsed="0.038149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.303387" elapsed="0.038899"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.343241" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18272 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.408410" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.408618" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.342689" elapsed="0.065984"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.408782" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:56:07.409224" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.302967" elapsed="0.106367"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.409930" elapsed="0.000918"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.302099" elapsed="0.108948"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.300272" elapsed="0.110965"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.299687" elapsed="0.111651"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.298638" elapsed="0.112822"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.298188" elapsed="0.113365"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.412671" level="INFO">${next} = 18273</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.411931" elapsed="0.000801"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.414034" level="INFO">${current_port} = 18273</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.413151" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.294310" elapsed="0.119949"/>
</kw>
<msg time="2026-08-15T23:56:07.414343" level="INFO">Repeating keyword, round 444/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.417002" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.416723" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.416680" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.417919" level="INFO">${current_Date} = 2026-08-15 23:56:07.418</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.417540" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.418980" level="INFO">${ellapsed_seconds} = 2622.919</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.418316" elapsed="0.000690"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.419311" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.419078" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.419059" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.416189" elapsed="0.003245"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.419960" level="INFO">${number} = 444</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.419581" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.421410" level="INFO">${number} = 444</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.421071" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.423443" level="INFO">${device-port} = 18273</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.422614" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.426165" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.460014" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.460262" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.426064" elapsed="0.034259"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.461237" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:07.461372" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.460489" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.460443" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.425763" elapsed="0.036098">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.425206" elapsed="0.036899"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.463080" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18273 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.528439" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.528651" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.462530" elapsed="0.066176"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.528857" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:07.529260" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.424770" elapsed="0.104596"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.529946" elapsed="0.000892"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.423992" elapsed="0.107083"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.422138" elapsed="0.109129"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.421594" elapsed="0.109773"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.420588" elapsed="0.110902"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.420140" elapsed="0.111444"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.532714" level="INFO">${next} = 18274</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.531965" elapsed="0.000809"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.534094" level="INFO">${current_port} = 18274</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.533193" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.414778" elapsed="0.119577"/>
</kw>
<msg time="2026-08-15T23:56:07.534443" level="INFO">Repeating keyword, round 445/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.537007" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.536729" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.536687" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.537833" level="INFO">${current_Date} = 2026-08-15 23:56:07.538</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.537469" elapsed="0.000427"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.538943" level="INFO">${ellapsed_seconds} = 2622.799</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.538275" elapsed="0.000704"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.539400" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.539078" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.539052" elapsed="0.000458"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.536189" elapsed="0.003382"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.540333" level="INFO">${number} = 445</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.539776" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.542381" level="INFO">${number} = 445</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.541877" elapsed="0.000543"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.545156" level="INFO">${device-port} = 18274</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.544061" elapsed="0.001207"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.551630" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.580282" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.580501" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.551525" elapsed="0.029035"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.581507" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:07.581641" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.580760" elapsed="0.001108">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.580708" elapsed="0.001264">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.551234" elapsed="0.031059">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.547599" elapsed="0.034844"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.583343" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18274 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.671753" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.671991" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.582848" elapsed="0.089199"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.672156" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:07.672550" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.547016" elapsed="0.125644"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.673251" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.545894" elapsed="0.128467"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.543406" elapsed="0.131142"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.542640" elapsed="0.132007"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.541233" elapsed="0.133535"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.540586" elapsed="0.134314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.676025" level="INFO">${next} = 18275</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.675243" elapsed="0.000842"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.677340" level="INFO">${current_port} = 18275</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.676442" elapsed="0.000992"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.534923" elapsed="0.142637"/>
</kw>
<msg time="2026-08-15T23:56:07.677645" level="INFO">Repeating keyword, round 446/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.679676" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.679525" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.679499" elapsed="0.000266"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.680249" level="INFO">${current_Date} = 2026-08-15 23:56:07.680</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.680031" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.680935" level="INFO">${ellapsed_seconds} = 2622.657</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.680491" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.681396" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.681071" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.681045" elapsed="0.000464"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.679199" elapsed="0.002396"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.682395" level="INFO">${number} = 446</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.681863" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.684453" level="INFO">${number} = 446</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.683981" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.687392" level="INFO">${device-port} = 18275</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.686131" elapsed="0.001371"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.691169" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.723934" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.724152" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.691071" elapsed="0.033140"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.725121" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:07.725257" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.724375" elapsed="0.000988">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.724330" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.690397" elapsed="0.035324">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.689795" elapsed="0.036252"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.726925" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18275 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.792464" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.792672" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.726398" elapsed="0.066328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.792872" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:07.793270" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.689231" elapsed="0.104146"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.793996" elapsed="0.000866"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.688137" elapsed="0.106916"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.685459" elapsed="0.109779"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.684712" elapsed="0.110625"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.683333" elapsed="0.112125"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.682652" elapsed="0.112900"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.796672" level="INFO">${next} = 18276</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.795934" elapsed="0.000797"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.798044" level="INFO">${current_port} = 18276</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.797139" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.678148" elapsed="0.120118"/>
</kw>
<msg time="2026-08-15T23:56:07.798352" level="INFO">Repeating keyword, round 447/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.801032" elapsed="0.000054"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.800594" elapsed="0.000563"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.800552" elapsed="0.000657"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.802021" level="INFO">${current_Date} = 2026-08-15 23:56:07.802</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.801556" elapsed="0.000529"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.803143" level="INFO">${ellapsed_seconds} = 2622.535</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.802419" elapsed="0.000783"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.803916" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.803360" elapsed="0.000679"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.803318" elapsed="0.000775"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.800069" elapsed="0.004126"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.805373" level="INFO">${number} = 447</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.804524" elapsed="0.000907"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.808007" level="INFO">${number} = 447</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.807486" elapsed="0.000561"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.810987" level="INFO">${device-port} = 18276</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.809767" elapsed="0.001341"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.815222" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.844332" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.844435" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.814657" elapsed="0.029805"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.844868" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:56:07.844929" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.844535" elapsed="0.000479">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.844515" elapsed="0.000542">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.814251" elapsed="0.030926">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.813621" elapsed="0.031619"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.845639" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18276 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:07.912729" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.912979" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.845393" elapsed="0.067643"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:07.913147" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:07.913584" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.812978" elapsed="0.100720"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:07.914350" elapsed="0.000936"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.811761" elapsed="0.103721"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.809082" elapsed="0.106591"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.808281" elapsed="0.107493"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.806822" elapsed="0.109135"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.805850" elapsed="0.110203"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.917198" level="INFO">${next} = 18277</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.916400" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.918563" level="INFO">${current_port} = 18277</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:07.917652" elapsed="0.001007"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.798768" elapsed="0.120121"/>
</kw>
<msg time="2026-08-15T23:56:07.918987" level="INFO">Repeating keyword, round 448/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:07.921573" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:07.921251" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.921208" elapsed="0.000517"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.922182" level="INFO">${current_Date} = 2026-08-15 23:56:07.922</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:07.922021" elapsed="0.000187"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:07.922664" level="INFO">${ellapsed_seconds} = 2622.415</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:07.922356" elapsed="0.000335"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.923039" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:07.922777" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:07.922754" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:07.920682" elapsed="0.002483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.923682" level="INFO">${number} = 448</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.923312" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.925138" level="INFO">${number} = 448</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.924780" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:07.927260" level="INFO">${device-port} = 18277</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:07.926352" elapsed="0.000992"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.929957" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:07.965617" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:07.966062" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.929854" elapsed="0.036278"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:07.967218" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:07.967360" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:07.966362" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:07.966297" elapsed="0.001275">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:07.929546" elapsed="0.038363">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:07.929049" elapsed="0.039156"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:07.969133" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18277 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.036501" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.036714" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:07.968582" elapsed="0.068191"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.036930" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:08.037407" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:07.928608" elapsed="0.108910"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.038137" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:07.927787" elapsed="0.111457"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:07.925897" elapsed="0.113547"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:07.925325" elapsed="0.114219"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.924332" elapsed="0.115344"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:07.923883" elapsed="0.115892"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.041210" level="INFO">${next} = 18278</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.040171" elapsed="0.001109"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.042277" level="INFO">${current_port} = 18278</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.041653" elapsed="0.000684"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:07.919415" elapsed="0.123011"/>
</kw>
<msg time="2026-08-15T23:56:08.042483" level="INFO">Repeating keyword, round 449/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.044102" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.043949" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.043921" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.044616" level="INFO">${current_Date} = 2026-08-15 23:56:08.045</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.044400" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.045340" level="INFO">${ellapsed_seconds} = 2622.292</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.044885" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.045837" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.045476" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.045449" elapsed="0.000500"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.043591" elapsed="0.002422"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.046723" level="INFO">${number} = 449</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.046216" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.048776" level="INFO">${number} = 449</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.048280" elapsed="0.000555"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.051650" level="INFO">${device-port} = 18278</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.050544" elapsed="0.001218"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.055027" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.088061" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.088282" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.054791" elapsed="0.033551"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.089403" elapsed="0.000074"/>
</kw>
<msg time="2026-08-15T23:56:08.089566" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.088507" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.088461" elapsed="0.001476">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.054513" elapsed="0.035754">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.054123" elapsed="0.036310"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.091469" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18278 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.160860" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.161301" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.090904" elapsed="0.070473"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.161552" elapsed="0.000126"/>
</return>
<msg time="2026-08-15T23:56:08.162138" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.053570" elapsed="0.108684"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.163035" elapsed="0.001130"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.052397" elapsed="0.111987"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.049910" elapsed="0.114703"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.049060" elapsed="0.115683"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.047632" elapsed="0.117370"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.047005" elapsed="0.118108"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.166299" level="INFO">${next} = 18279</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.165552" elapsed="0.000794"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.167362" level="INFO">${current_port} = 18279</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.166595" elapsed="0.000872"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.042754" elapsed="0.124811"/>
</kw>
<msg time="2026-08-15T23:56:08.167667" level="INFO">Repeating keyword, round 450/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.169561" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.169390" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.169358" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.170225" level="INFO">${current_Date} = 2026-08-15 23:56:08.170</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.169976" elapsed="0.000289"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.170969" level="INFO">${ellapsed_seconds} = 2622.167</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.170477" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.171595" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.171171" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.171130" elapsed="0.000584"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.169029" elapsed="0.002751"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.172556" level="INFO">${number} = 450</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.172018" elapsed="0.000576"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.174700" level="INFO">${number} = 450</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.174204" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.177652" level="INFO">${device-port} = 18279</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.176430" elapsed="0.001335"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.180376" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.212212" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.212449" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.180267" elapsed="0.032242"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.213523" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:08.213662" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.212681" elapsed="0.001091">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.212633" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.179964" elapsed="0.034235">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.179531" elapsed="0.034888"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.215310" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18279 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.274050" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.274267" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.214779" elapsed="0.059544"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.274438" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:08.274924" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.179108" elapsed="0.095958"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.275636" elapsed="0.000932"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.178257" elapsed="0.098620"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.175754" elapsed="0.101326"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.174990" elapsed="0.102193"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.173534" elapsed="0.103775"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.172879" elapsed="0.104528"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.278583" level="INFO">${next} = 18280</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.277760" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.279981" level="INFO">${current_port} = 18280</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.279059" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.168080" elapsed="0.112132"/>
</kw>
<msg time="2026-08-15T23:56:08.280301" level="INFO">Repeating keyword, round 451/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.282481" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.282326" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.282298" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.283026" level="INFO">${current_Date} = 2026-08-15 23:56:08.283</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.282783" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.283717" level="INFO">${ellapsed_seconds} = 2622.054</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.283273" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.284209" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.283875" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.283848" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.281989" elapsed="0.002394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.285136" level="INFO">${number} = 451</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.284586" elapsed="0.000588"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.287369" level="INFO">${number} = 451</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.286843" elapsed="0.000565"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.290443" level="INFO">${device-port} = 18280</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.289305" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.294322" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.327999" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.328228" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.294060" elapsed="0.034228"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.329314" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:08.329453" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.328457" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.328408" elapsed="0.001360">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.293656" elapsed="0.036467">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.293056" elapsed="0.037214"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.331162" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18280 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.400935" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.401151" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.330624" elapsed="0.070583"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.401319" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:08.401725" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.292363" elapsed="0.109520"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.402468" elapsed="0.000889"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.291204" elapsed="0.112344"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.288509" elapsed="0.115230"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.287651" elapsed="0.116234"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.286131" elapsed="0.117882"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.285422" elapsed="0.118686"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.405099" level="INFO">${next} = 18281</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.404505" elapsed="0.000632"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.405927" level="INFO">${current_port} = 18281</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.405364" elapsed="0.000625"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.280792" elapsed="0.125279"/>
</kw>
<msg time="2026-08-15T23:56:08.406126" level="INFO">Repeating keyword, round 452/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.407898" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.407720" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.407690" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.408492" level="INFO">${current_Date} = 2026-08-15 23:56:08.408</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.408248" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.409204" level="INFO">${ellapsed_seconds} = 2621.929</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.408740" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.409671" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.409341" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.409316" elapsed="0.000466"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.407366" elapsed="0.002503"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.410600" level="INFO">${number} = 452</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.410083" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.412650" level="INFO">${number} = 452</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.412153" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.415437" level="INFO">${device-port} = 18281</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.414319" elapsed="0.001230"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.418581" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.452172" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.452444" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.418316" elapsed="0.034193"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.453448" elapsed="0.000081"/>
</kw>
<msg time="2026-08-15T23:56:08.453641" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.452679" elapsed="0.001097">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.452632" elapsed="0.001283">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.418040" elapsed="0.036154">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.417619" elapsed="0.036785"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.455294" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18281 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.524419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.524649" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.454763" elapsed="0.069941"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.524862" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:08.525273" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.417204" elapsed="0.108180"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.526021" elapsed="0.000896"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.416194" elapsed="0.110922"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.413653" elapsed="0.113657"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.412931" elapsed="0.114480"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.411508" elapsed="0.116027"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.410878" elapsed="0.116756"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.528881" level="INFO">${next} = 18282</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.528025" elapsed="0.000920"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.530218" level="INFO">${current_port} = 18282</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.529322" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.406392" elapsed="0.124057"/>
</kw>
<msg time="2026-08-15T23:56:08.530538" level="INFO">Repeating keyword, round 453/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.533181" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.532965" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.532938" elapsed="0.000339"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.533701" level="INFO">${current_Date} = 2026-08-15 23:56:08.534</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.533482" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.534409" level="INFO">${ellapsed_seconds} = 2621.803</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.533970" elapsed="0.000476"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.534949" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.534544" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.534518" elapsed="0.000556"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.532397" elapsed="0.002743"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.535907" level="INFO">${number} = 453</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.535349" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.538237" level="INFO">${number} = 453</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.537624" elapsed="0.000652"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.541244" level="INFO">${device-port} = 18282</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.540051" elapsed="0.001308"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.545139" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.576222" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.576449" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.544772" elapsed="0.031751"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.577658" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:56:08.577841" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.576790" elapsed="0.001243">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.576721" elapsed="0.001412">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.544374" elapsed="0.034032">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.543735" elapsed="0.034815"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.579551" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18282 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.644511" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.644742" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.578977" elapsed="0.065868"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.644967" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:08.645399" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.543139" elapsed="0.102382"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.646138" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.542005" elapsed="0.105297"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.539341" elapsed="0.108153"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.538504" elapsed="0.109090"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.536956" elapsed="0.110761"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.536228" elapsed="0.111625"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.649023" level="INFO">${next} = 18283</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.648310" elapsed="0.000751"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.649855" level="INFO">${current_port} = 18283</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.649288" elapsed="0.000629"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.531044" elapsed="0.118956"/>
</kw>
<msg time="2026-08-15T23:56:08.650054" level="INFO">Repeating keyword, round 454/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.651719" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.651561" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.651526" elapsed="0.000308"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.652348" level="INFO">${current_Date} = 2026-08-15 23:56:08.652</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.652119" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.653168" level="INFO">${ellapsed_seconds} = 2621.685</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.652678" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.653644" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.653308" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.653282" elapsed="0.000474"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.651217" elapsed="0.002625"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.654564" level="INFO">${number} = 454</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.654050" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.656854" level="INFO">${number} = 454</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.656329" elapsed="0.000565"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.659686" level="INFO">${device-port} = 18283</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.658533" elapsed="0.001295"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.662923" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.696035" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.696267" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.662748" elapsed="0.033581"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.697300" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:56:08.697464" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.696502" elapsed="0.001083">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.696454" elapsed="0.001230">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.662315" elapsed="0.035707">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.661914" elapsed="0.036347"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.699189" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18283 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.774317" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.774537" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.698644" elapsed="0.075949"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.774707" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:08.775175" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.661469" elapsed="0.113817"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.775967" elapsed="0.000990"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.660541" elapsed="0.116615"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.657897" elapsed="0.119453"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.657125" elapsed="0.120327"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.655574" elapsed="0.122001"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.654891" elapsed="0.122780"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.778935" level="INFO">${next} = 18284</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.778067" elapsed="0.000933"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.780331" level="INFO">${current_port} = 18284</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.779381" elapsed="0.001072"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.650328" elapsed="0.130262"/>
</kw>
<msg time="2026-08-15T23:56:08.780681" level="INFO">Repeating keyword, round 455/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.783427" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.783148" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.783084" elapsed="0.000488"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.784375" level="INFO">${current_Date} = 2026-08-15 23:56:08.784</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.784008" elapsed="0.000428"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.785189" level="INFO">${ellapsed_seconds} = 2621.553</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.784850" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.785538" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.785289" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.785269" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.782552" elapsed="0.003113"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.786197" level="INFO">${number} = 455</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.785826" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.787671" level="INFO">${number} = 455</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.787315" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.789705" level="INFO">${device-port} = 18284</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.788922" elapsed="0.000863"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.792517" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.824528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.824765" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.792415" elapsed="0.032452"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.826442" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:08.826694" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.825045" elapsed="0.001989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.824998" elapsed="0.002248">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.792124" elapsed="0.035705">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.791504" elapsed="0.036597"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.829340" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18284 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:08.896577" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.896829" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.828587" elapsed="0.068304"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:08.897007" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:08.897415" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.791076" elapsed="0.106449"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:08.898131" elapsed="0.000992"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.790246" elapsed="0.109082"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.788425" elapsed="0.111136"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.787876" elapsed="0.111788"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.786855" elapsed="0.113076"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.786388" elapsed="0.113651"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.901253" level="INFO">${next} = 18285</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.900392" elapsed="0.000923"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.902915" level="INFO">${current_port} = 18285</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:08.901963" elapsed="0.001175"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.781234" elapsed="0.122058"/>
</kw>
<msg time="2026-08-15T23:56:08.903565" level="INFO">Repeating keyword, round 456/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:08.906295" elapsed="0.000093"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:08.906050" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.906020" elapsed="0.000449"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.907232" level="INFO">${current_Date} = 2026-08-15 23:56:08.907</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:08.906906" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:08.908148" level="INFO">${ellapsed_seconds} = 2621.43</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:08.907668" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.908628" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:08.908289" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:08.908262" elapsed="0.000518"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:08.905443" elapsed="0.003436"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.909617" level="INFO">${number} = 456</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.909090" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.911726" level="INFO">${number} = 456</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.911196" elapsed="0.000575"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:08.914535" level="INFO">${device-port} = 18285</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:08.913588" elapsed="0.001030"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.917493" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:08.948301" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:08.948561" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.917391" elapsed="0.031230"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:08.949614" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:08.949749" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:08.948848" elapsed="0.001039">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:08.948755" elapsed="0.001229">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:08.917108" elapsed="0.033166">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:08.916371" elapsed="0.034150"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:08.951473" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18285 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.016165" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.016392" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:08.950912" elapsed="0.065535"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.016566" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:09.017046" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:08.915948" elapsed="0.101209"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.017766" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:08.915095" elapsed="0.103883"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:08.912834" elapsed="0.106350"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:08.912027" elapsed="0.107323"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.910540" elapsed="0.108941"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:08.909906" elapsed="0.109674"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.020438" level="INFO">${next} = 18286</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.019937" elapsed="0.000538"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.021320" level="INFO">${current_port} = 18286</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.020723" elapsed="0.000658"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:08.903988" elapsed="0.117474"/>
</kw>
<msg time="2026-08-15T23:56:09.021517" level="INFO">Repeating keyword, round 457/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.023320" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.023121" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.023092" elapsed="0.000320"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.023888" level="INFO">${current_Date} = 2026-08-15 23:56:09.024</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.023625" elapsed="0.000301"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.024623" level="INFO">${ellapsed_seconds} = 2621.313</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.024133" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.025145" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.024758" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.024732" elapsed="0.000525"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.022648" elapsed="0.002672"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.026053" level="INFO">${number} = 457</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.025522" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.028127" level="INFO">${number} = 457</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.027621" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.031028" level="INFO">${device-port} = 18286</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.029881" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.036699" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.068285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.068620" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.036594" elapsed="0.032086"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.069769" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:09.069939" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.068941" elapsed="0.001221">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.068875" elapsed="0.001400">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.036300" elapsed="0.034293">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.033162" elapsed="0.037577"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.071691" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18286 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.137108" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.137432" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.071174" elapsed="0.066317"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.137642" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:56:09.138182" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.032707" elapsed="0.105586"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.138950" elapsed="0.001034"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.031911" elapsed="0.108263"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.029199" elapsed="0.111162"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.028386" elapsed="0.112078"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.026954" elapsed="0.113634"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.026310" elapsed="0.114373"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.141912" level="INFO">${next} = 18287</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.141080" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.143187" level="INFO">${current_port} = 18287</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.142426" elapsed="0.000827"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.021830" elapsed="0.121512"/>
</kw>
<msg time="2026-08-15T23:56:09.143401" level="INFO">Repeating keyword, round 458/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.145189" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.145018" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.144982" elapsed="0.000304"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.145834" level="INFO">${current_Date} = 2026-08-15 23:56:09.146</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.145572" elapsed="0.000303"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.146564" level="INFO">${ellapsed_seconds} = 2621.191</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.146096" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.147112" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.146708" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.146681" elapsed="0.000550"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.144632" elapsed="0.002666"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.148084" level="INFO">${number} = 458</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.147516" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.150237" level="INFO">${number} = 458</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.149704" elapsed="0.000573"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.152738" level="INFO">${device-port} = 18287</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.151951" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.155540" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.192209" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.192435" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.155437" elapsed="0.037057"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.193412" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:09.193545" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.192658" elapsed="0.000994">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.192613" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.154947" elapsed="0.039119">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.154488" elapsed="0.039834"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.195240" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18287 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.264336" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.264550" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.194676" elapsed="0.069929"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.264714" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:09.265159" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.154079" elapsed="0.111188"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.265857" elapsed="0.000852"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.153284" elapsed="0.113692"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.151354" elapsed="0.115814"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.150513" elapsed="0.116756"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.149043" elapsed="0.118351"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.148353" elapsed="0.119138"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.268633" level="INFO">${next} = 18288</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.267882" elapsed="0.000811"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.270005" level="INFO">${current_port} = 18288</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.269106" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.143726" elapsed="0.126502"/>
</kw>
<msg time="2026-08-15T23:56:09.270314" level="INFO">Repeating keyword, round 459/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.272458" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.272305" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.272279" elapsed="0.000267"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.272986" level="INFO">${current_Date} = 2026-08-15 23:56:09.273</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.272747" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.273653" level="INFO">${ellapsed_seconds} = 2621.064</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.273227" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.274137" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.273787" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.273761" elapsed="0.000488"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.271976" elapsed="0.002337"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.275057" level="INFO">${number} = 459</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.274512" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.277305" level="INFO">${number} = 459</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.276763" elapsed="0.000580"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.280019" level="INFO">${device-port} = 18288</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.279011" elapsed="0.001087"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.282714" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.316313" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.316549" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.282443" elapsed="0.034165"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.317540" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:09.317674" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.316780" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.316731" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.282162" elapsed="0.036125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.281743" elapsed="0.036686"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.319343" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18288 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.384464" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.384743" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.318848" elapsed="0.065992"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.384981" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:56:09.385448" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.281331" elapsed="0.104229"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.386205" elapsed="0.001042"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.280533" elapsed="0.106905"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.278312" elapsed="0.109316"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.277566" elapsed="0.110167"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.276033" elapsed="0.111879"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.275311" elapsed="0.112702"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.389179" level="INFO">${next} = 18289</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.388361" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.390526" level="INFO">${current_port} = 18289</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.389601" elapsed="0.001094"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.270738" elapsed="0.120177"/>
</kw>
<msg time="2026-08-15T23:56:09.391009" level="INFO">Repeating keyword, round 460/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.393573" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.393320" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.393277" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.394523" level="INFO">${current_Date} = 2026-08-15 23:56:09.394</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.394163" elapsed="0.000469"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.395294" level="INFO">${ellapsed_seconds} = 2620.943</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.394959" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.395644" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.395391" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.395373" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.392757" elapsed="0.003014"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.396301" level="INFO">${number} = 460</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.395935" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.397740" level="INFO">${number} = 460</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.397396" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.399765" level="INFO">${device-port} = 18289</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.398982" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.402355" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.431960" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.432195" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.402251" elapsed="0.030003"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.433186" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:09.433325" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.432424" elapsed="0.001010">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.432375" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.401972" elapsed="0.031878">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.401553" elapsed="0.032517"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.434972" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18289 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.500188" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.500426" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.434426" elapsed="0.066063"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.500602" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:09.501082" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.401136" elapsed="0.100056"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.501748" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.400315" elapsed="0.102648"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.398481" elapsed="0.104674"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.397946" elapsed="0.105312"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.396948" elapsed="0.106433"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.396483" elapsed="0.106993"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.504619" level="INFO">${next} = 18290</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.503864" elapsed="0.000814"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.505996" level="INFO">${current_port} = 18290</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.505092" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.391466" elapsed="0.114757"/>
</kw>
<msg time="2026-08-15T23:56:09.506309" level="INFO">Repeating keyword, round 461/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.509024" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.508719" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.508672" elapsed="0.000500"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.509944" level="INFO">${current_Date} = 2026-08-15 23:56:09.510</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.509500" elapsed="0.000531"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.511069" level="INFO">${ellapsed_seconds} = 2620.827</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.510458" elapsed="0.000638"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.511412" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.511166" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.511147" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.508118" elapsed="0.003419"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.512093" level="INFO">${number} = 461</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.511684" elapsed="0.000436"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.513764" level="INFO">${number} = 461</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.513365" elapsed="0.000427"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.515897" level="INFO">${device-port} = 18290</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.515057" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.518562" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.552181" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.552407" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.518456" elapsed="0.034012"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.553400" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:09.553534" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.552636" elapsed="0.001102">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.552589" elapsed="0.001284">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.518142" elapsed="0.036024">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.517694" elapsed="0.036641"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.555208" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18290 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.624321" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.624556" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.554690" elapsed="0.069925"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.624737" elapsed="0.000139"/>
</return>
<msg time="2026-08-15T23:56:09.625269" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.517272" elapsed="0.108123"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.626051" elapsed="0.001040"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.516430" elapsed="0.110880"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.514537" elapsed="0.112989"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.513975" elapsed="0.113667"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.512726" elapsed="0.115052"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.512276" elapsed="0.115656"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.629177" level="INFO">${next} = 18291</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.628305" elapsed="0.000935"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.630595" level="INFO">${current_port} = 18291</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.629613" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.506760" elapsed="0.124125"/>
</kw>
<msg time="2026-08-15T23:56:09.630953" level="INFO">Repeating keyword, round 462/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.632545" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.632386" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.632358" elapsed="0.000277"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.633211" level="INFO">${current_Date} = 2026-08-15 23:56:09.633</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.632935" elapsed="0.000324"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.633972" level="INFO">${ellapsed_seconds} = 2620.704</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.633494" elapsed="0.000516"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.634467" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.634112" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.634085" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.632048" elapsed="0.002595"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.635386" level="INFO">${number} = 462</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.634869" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.637423" level="INFO">${number} = 462</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.636943" elapsed="0.000519"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.640230" level="INFO">${device-port} = 18291</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.639114" elapsed="0.001228"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.643601" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.675796" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.676062" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.643499" elapsed="0.032623"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.677159" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:09.677307" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.676296" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.676246" elapsed="0.001266">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.643222" elapsed="0.034608">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.642719" elapsed="0.035400"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.678928" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18291 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.744469" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.744732" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.678482" elapsed="0.066311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.744968" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:56:09.745450" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.642103" elapsed="0.103465"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.746272" elapsed="0.000995"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.640984" elapsed="0.106478"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.638451" elapsed="0.109207"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.637682" elapsed="0.110079"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.636290" elapsed="0.111648"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.635640" elapsed="0.112400"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.749236" level="INFO">${next} = 18292</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.748392" elapsed="0.000907"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.750695" level="INFO">${current_port} = 18292</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.749668" elapsed="0.001189"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.631230" elapsed="0.119731"/>
</kw>
<msg time="2026-08-15T23:56:09.751021" level="INFO">Repeating keyword, round 463/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.752637" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.752478" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.752450" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.753192" level="INFO">${current_Date} = 2026-08-15 23:56:09.753</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.752960" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.753953" level="INFO">${ellapsed_seconds} = 2620.584</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.753450" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.754436" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.754092" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.754065" elapsed="0.000481"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.752137" elapsed="0.002472"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.755353" level="INFO">${number} = 463</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.754833" elapsed="0.000556"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.757398" level="INFO">${number} = 463</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.756895" elapsed="0.000542"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.760058" level="INFO">${device-port} = 18292</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.759246" elapsed="0.000896"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.762656" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.796106" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.796411" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.762549" elapsed="0.033977"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.797608" elapsed="0.000071"/>
</kw>
<msg time="2026-08-15T23:56:09.797770" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.796756" elapsed="0.001310">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.796698" elapsed="0.001493">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.762270" elapsed="0.036222">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.761849" elapsed="0.036806"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.799576" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18292 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.868533" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.868761" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.799062" elapsed="0.069797"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.868981" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:09.869412" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.761403" elapsed="0.108121"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.870188" elapsed="0.000976"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.760590" elapsed="0.110775"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.758620" elapsed="0.112937"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.757686" elapsed="0.113979"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.756252" elapsed="0.115600"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.755603" elapsed="0.116354"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.873119" level="INFO">${next} = 18293</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.872307" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.874525" level="INFO">${current_port} = 18293</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.873569" elapsed="0.001052"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.751316" elapsed="0.123438"/>
</kw>
<msg time="2026-08-15T23:56:09.874901" level="INFO">Repeating keyword, round 464/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.877968" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.877536" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.877479" elapsed="0.000680"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.879071" level="INFO">${current_Date} = 2026-08-15 23:56:09.879</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.878721" elapsed="0.000382"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.879659" level="INFO">${ellapsed_seconds} = 2620.458</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.879310" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.880035" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.879759" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.879741" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.876843" elapsed="0.003318"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.880695" level="INFO">${number} = 464</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.880309" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.882236" level="INFO">${number} = 464</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.881882" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.884253" level="INFO">${device-port} = 18293</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.883448" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.887229" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:09.920281" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.920551" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.886935" elapsed="0.033685"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.921728" elapsed="0.000095"/>
</kw>
<msg time="2026-08-15T23:56:09.921915" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:09.920853" elapsed="0.001175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:09.920755" elapsed="0.001367">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:09.886624" elapsed="0.035788">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:09.886229" elapsed="0.036408"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:09.923604" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18293 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:09.988359" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:09.988697" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:09.923071" elapsed="0.065686"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:09.988946" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:56:09.989458" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:09.885747" elapsed="0.103886"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:09.990378" elapsed="0.001091"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:09.884835" elapsed="0.106828"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:09.882992" elapsed="0.108914"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:09.882423" elapsed="0.109591"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.881381" elapsed="0.110764"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:09.880898" elapsed="0.111367"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.993470" level="INFO">${next} = 18294</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.992625" elapsed="0.000933"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:09.995177" level="INFO">${current_port} = 18294</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:09.994153" elapsed="0.001134"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.875400" elapsed="0.120079"/>
</kw>
<msg time="2026-08-15T23:56:09.995574" level="INFO">Repeating keyword, round 465/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:09.998056" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:09.997933" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.997909" elapsed="0.000216"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.998475" level="INFO">${current_Date} = 2026-08-15 23:56:09.998</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:09.998284" elapsed="0.000224"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:09.999021" level="INFO">${ellapsed_seconds} = 2620.339</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:09.998662" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:09.999380" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:09.999121" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:09.999101" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:09.997441" elapsed="0.002080"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.000062" level="INFO">${number} = 465</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:09.999667" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.001594" level="INFO">${number} = 465</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.001223" elapsed="0.000399"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.003719" level="INFO">${device-port} = 18294</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.002895" elapsed="0.000923"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.006555" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.040362" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.040588" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.006271" elapsed="0.034379"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.041663" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:10.041836" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.040861" elapsed="0.001216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.040772" elapsed="0.001417">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.005971" elapsed="0.036523">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.005542" elapsed="0.037102"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.043638" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18294 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.108579" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.108968" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.043081" elapsed="0.065951"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.109181" elapsed="0.000101"/>
</return>
<msg time="2026-08-15T23:56:10.109718" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.005091" elapsed="0.104830"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.110559" elapsed="0.001086"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.004265" elapsed="0.107643"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.002369" elapsed="0.109761"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.001789" elapsed="0.110451"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.000753" elapsed="0.111620"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.000244" elapsed="0.112231"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.113726" level="INFO">${next} = 18295</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.112884" elapsed="0.000910"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.115234" level="INFO">${current_port} = 18295</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.114268" elapsed="0.001069"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:09.996086" elapsed="0.119385"/>
</kw>
<msg time="2026-08-15T23:56:10.115560" level="INFO">Repeating keyword, round 466/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.118288" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.118105" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.118075" elapsed="0.000310"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.118954" level="INFO">${current_Date} = 2026-08-15 23:56:10.119</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.118693" elapsed="0.000305"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.119673" level="INFO">${ellapsed_seconds} = 2620.218</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.119218" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.120201" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.119837" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.119789" elapsed="0.000528"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.117644" elapsed="0.002739"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.121178" level="INFO">${number} = 466</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.120593" elapsed="0.000623"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.123285" level="INFO">${number} = 466</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.122751" elapsed="0.000573"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.126414" level="INFO">${device-port} = 18295</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.125031" elapsed="0.001498"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.130487" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.174255" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.174495" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.130369" elapsed="0.044185"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.175510" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:10.175648" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.174734" elapsed="0.001023">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.174683" elapsed="0.001205">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.129657" elapsed="0.046524">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.129030" elapsed="0.047370"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.177307" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18295 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.248581" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.248958" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.176757" elapsed="0.072264"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.249222" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:56:10.249756" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.128389" elapsed="0.121531"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.250585" elapsed="0.001018"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.127202" elapsed="0.124638"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.124338" elapsed="0.127707"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.123547" elapsed="0.128602"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.122126" elapsed="0.130179"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.121454" elapsed="0.130963"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.253707" level="INFO">${next} = 18296</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.252777" elapsed="0.000993"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.255188" level="INFO">${current_port} = 18296</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.254204" elapsed="0.001087"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.116099" elapsed="0.139346"/>
</kw>
<msg time="2026-08-15T23:56:10.255538" level="INFO">Repeating keyword, round 467/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.258087" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.257962" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.257940" elapsed="0.000213"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.258490" level="INFO">${current_Date} = 2026-08-15 23:56:10.258</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.258303" elapsed="0.000215"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.259025" level="INFO">${ellapsed_seconds} = 2620.079</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.258668" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.259382" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.259124" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.259105" elapsed="0.000364"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.257525" elapsed="0.001990"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.260051" level="INFO">${number} = 467</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.259661" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.261573" level="INFO">${number} = 467</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.261214" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.263615" level="INFO">${device-port} = 18296</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.262794" elapsed="0.000902"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.266436" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.299832" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.300132" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.266333" elapsed="0.033860"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.301320" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:10.301463" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.300395" elapsed="0.001289">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.300340" elapsed="0.001447">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.266050" elapsed="0.036068">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.265431" elapsed="0.036834"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.303208" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18296 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.369243" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.369590" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.302638" elapsed="0.067012"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.369843" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:56:10.370368" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.264990" elapsed="0.105494"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.371165" elapsed="0.000985"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.264156" elapsed="0.108197"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.262331" elapsed="0.110229"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.261767" elapsed="0.110913"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.260710" elapsed="0.112149"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.260242" elapsed="0.112847"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.374331" level="INFO">${next} = 18297</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.373461" elapsed="0.000932"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.375759" level="INFO">${current_port} = 18297</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.374775" elapsed="0.001150"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.256065" elapsed="0.119996"/>
</kw>
<msg time="2026-08-15T23:56:10.376149" level="INFO">Repeating keyword, round 468/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.378412" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.378287" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.378264" elapsed="0.000215"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.378895" level="INFO">${current_Date} = 2026-08-15 23:56:10.379</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.378699" elapsed="0.000223"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.379409" level="INFO">${ellapsed_seconds} = 2619.958</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.379074" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.379766" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.379507" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.379488" elapsed="0.000375"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.378033" elapsed="0.001877"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.380429" level="INFO">${number} = 468</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.380057" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.381917" level="INFO">${number} = 468</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.381557" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.383932" level="INFO">${device-port} = 18297</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.383121" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.386735" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.424181" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.424405" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.386630" elapsed="0.037834"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.425484" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:10.425621" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.424630" elapsed="0.001100">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.424584" elapsed="0.001270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.386347" elapsed="0.039798">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.385729" elapsed="0.040646"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.427246" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18297 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.492247" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.492463" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.426732" elapsed="0.065786"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.492630" elapsed="0.000127"/>
</return>
<msg time="2026-08-15T23:56:10.493133" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.385307" elapsed="0.107934"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.493797" elapsed="0.000890"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.384457" elapsed="0.110459"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.382641" elapsed="0.112464"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.382106" elapsed="0.113100"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.381105" elapsed="0.114222"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.380613" elapsed="0.114810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.496561" level="INFO">${next} = 18298</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.495768" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.497916" level="INFO">${current_port} = 18298</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.497078" elapsed="0.000900"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.376665" elapsed="0.121393"/>
</kw>
<msg time="2026-08-15T23:56:10.498111" level="INFO">Repeating keyword, round 469/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.499787" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.499575" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.499548" elapsed="0.000351"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.500329" level="INFO">${current_Date} = 2026-08-15 23:56:10.500</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.500110" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.501041" level="INFO">${ellapsed_seconds} = 2619.837</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.500575" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.501537" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.501176" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.501150" elapsed="0.000498"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.499244" elapsed="0.002467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.502456" level="INFO">${number} = 469</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.501935" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.504569" level="INFO">${number} = 469</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.504006" elapsed="0.000612"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.507930" level="INFO">${device-port} = 18298</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.506720" elapsed="0.001322"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.513837" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.544064" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.544312" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.513713" elapsed="0.030660"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.545452" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:10.545589" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.544550" elapsed="0.001324">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.544502" elapsed="0.001485">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.513412" elapsed="0.032859">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.510319" elapsed="0.036097"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.547353" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18298 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.612068" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.612356" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.546848" elapsed="0.065568"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.612587" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:56:10.613157" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.509879" elapsed="0.103393"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.613997" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.508650" elapsed="0.106533"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.505932" elapsed="0.109445"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.504967" elapsed="0.110514"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.503356" elapsed="0.112253"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.502710" elapsed="0.112996"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.617031" level="INFO">${next} = 18299</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.616127" elapsed="0.000973"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.618508" level="INFO">${current_port} = 18299</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.617502" elapsed="0.001107"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.498380" elapsed="0.120375"/>
</kw>
<msg time="2026-08-15T23:56:10.618919" level="INFO">Repeating keyword, round 470/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.621364" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.621205" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.621177" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.621982" level="INFO">${current_Date} = 2026-08-15 23:56:10.622</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.621724" elapsed="0.000295"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.622678" level="INFO">${ellapsed_seconds} = 2619.715</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.622229" elapsed="0.000485"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.623180" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.622831" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.622787" elapsed="0.000506"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.620853" elapsed="0.002503"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.624097" level="INFO">${number} = 470</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.623562" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.626167" level="INFO">${number} = 470</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.625662" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.629016" level="INFO">${device-port} = 18299</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.627843" elapsed="0.001287"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.633147" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.663982" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.664234" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.632710" elapsed="0.031586"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.665379" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:10.665530" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.664520" elapsed="0.001148">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.664455" elapsed="0.001314">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.632059" elapsed="0.034069">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.631488" elapsed="0.034865"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.667273" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18299 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.732263" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.732672" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.666729" elapsed="0.066007"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.732945" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:56:10.733492" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.630913" elapsed="0.102702"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.734481" elapsed="0.001570"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.629750" elapsed="0.106649"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.627195" elapsed="0.109745"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.626430" elapsed="0.110691"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.625038" elapsed="0.112299"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.624354" elapsed="0.113159"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.739432" level="INFO">${next} = 18300</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.738110" elapsed="0.001418"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.740555" level="INFO">${current_port} = 18300</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.739945" elapsed="0.000673"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.619401" elapsed="0.121302"/>
</kw>
<msg time="2026-08-15T23:56:10.740762" level="INFO">Repeating keyword, round 471/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.742653" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.742434" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.742392" elapsed="0.000356"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.743274" level="INFO">${current_Date} = 2026-08-15 23:56:10.743</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.742993" elapsed="0.000320"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.744129" level="INFO">${ellapsed_seconds} = 2619.594</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.743563" elapsed="0.000615"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.745138" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.744416" elapsed="0.000872"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.744276" elapsed="0.001073"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.742023" elapsed="0.003441"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.746797" level="INFO">${number} = 471</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.745868" elapsed="0.001031"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.750411" level="INFO">${number} = 471</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.749554" elapsed="0.000923"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.755460" level="INFO">${device-port} = 18300</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.753481" elapsed="0.002173"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.759157" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.784063" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.784324" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.758767" elapsed="0.025620"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.785336" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:10.785471" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.784558" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.784511" elapsed="0.001332">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.758470" elapsed="0.027665">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.758074" elapsed="0.028203"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.787188" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18300 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.856377" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.856684" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.786628" elapsed="0.070113"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.856925" elapsed="0.000101"/>
</return>
<msg time="2026-08-15T23:56:10.857414" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.757635" elapsed="0.099892"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.858216" elapsed="0.001052"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.756840" elapsed="0.102633"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.752347" elapsed="0.107336"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.750900" elapsed="0.108897"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.748439" elapsed="0.111545"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.747282" elapsed="0.112809"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.861415" level="INFO">${next} = 18301</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.860522" elapsed="0.000958"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.862920" level="INFO">${current_port} = 18301</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.861920" elapsed="0.001103"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.741137" elapsed="0.122026"/>
</kw>
<msg time="2026-08-15T23:56:10.863258" level="INFO">Repeating keyword, round 472/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.865569" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.865407" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.865377" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.866188" level="INFO">${current_Date} = 2026-08-15 23:56:10.866</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.865952" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.866906" level="INFO">${ellapsed_seconds} = 2619.471</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.866433" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.867387" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.867042" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.867016" elapsed="0.000484"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.865063" elapsed="0.002500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.868329" level="INFO">${number} = 472</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.867769" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.870467" level="INFO">${number} = 472</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.869981" elapsed="0.000523"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.873359" level="INFO">${device-port} = 18301</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.872236" elapsed="0.001238"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.877201" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:10.907868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.908016" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.877088" elapsed="0.031111"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.908734" elapsed="0.000028"/>
</kw>
<msg time="2026-08-15T23:56:10.908817" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:10.908345" elapsed="0.000526">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:10.908314" elapsed="0.000602">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.876591" elapsed="0.032472">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.875923" elapsed="0.033269"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.909593" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18301 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:10.976628" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:10.976975" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.909361" elapsed="0.067673"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:10.977178" elapsed="0.000101"/>
</return>
<msg time="2026-08-15T23:56:10.977669" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.875314" elapsed="0.102466"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:10.978444" elapsed="0.001001"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.874176" elapsed="0.105462"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.871553" elapsed="0.108325"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.870755" elapsed="0.109268"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.869321" elapsed="0.110843"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.868584" elapsed="0.111687"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.981521" level="INFO">${next} = 18302</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.980648" elapsed="0.000936"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.983151" level="INFO">${current_port} = 18302</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:10.982053" elapsed="0.001206"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.863753" elapsed="0.119646"/>
</kw>
<msg time="2026-08-15T23:56:10.983495" level="INFO">Repeating keyword, round 473/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:10.986330" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:10.986061" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.986013" elapsed="0.000474"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.987333" level="INFO">${current_Date} = 2026-08-15 23:56:10.987</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:10.986870" elapsed="0.000530"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:10.988834" level="INFO">${ellapsed_seconds} = 2619.35</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:10.987760" elapsed="0.001112"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:10.989215" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:10.988958" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:10.988938" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:10.985454" elapsed="0.003888"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.989925" level="INFO">${number} = 473</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.989524" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.991453" level="INFO">${number} = 473</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.991102" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:10.993500" level="INFO">${device-port} = 18302</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:10.992678" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:10.996163" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.032333" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.032559" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:10.996051" elapsed="0.036569"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.033548" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:11.033683" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.032785" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.032739" elapsed="0.001290">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:10.995716" elapsed="0.038604">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:10.995310" elapsed="0.039153"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.035336" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18302 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.108149" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.108362" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.034844" elapsed="0.073573"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.108528" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:11.108985" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:10.994886" elapsed="0.114211"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.109650" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:10.994052" elapsed="0.116681"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:10.992219" elapsed="0.118757"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:10.991643" elapsed="0.119434"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.990596" elapsed="0.120605"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:10.990109" elapsed="0.121187"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.112469" level="INFO">${next} = 18303</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.111640" elapsed="0.000890"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.113792" level="INFO">${current_port} = 18303</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.112936" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:10.984056" elapsed="0.130030"/>
</kw>
<msg time="2026-08-15T23:56:11.114171" level="INFO">Repeating keyword, round 474/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.116733" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.116487" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.116445" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.117359" level="INFO">${current_Date} = 2026-08-15 23:56:11.117</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.117134" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.118078" level="INFO">${ellapsed_seconds} = 2619.22</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.117606" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.118550" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.118215" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.118189" elapsed="0.000472"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.115955" elapsed="0.002769"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.119475" level="INFO">${number} = 474</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.118949" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.121573" level="INFO">${number} = 474</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.121092" elapsed="0.000518"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.124417" level="INFO">${device-port} = 18303</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.123277" elapsed="0.001254"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.128015" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.164127" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.164353" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.127871" elapsed="0.036541"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.165324" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:11.165457" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.164579" elapsed="0.000984">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.164532" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.127413" elapsed="0.038544">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.126872" elapsed="0.039298"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.167037" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18303 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.232543" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.232756" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.166520" elapsed="0.066327"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.232963" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:11.233369" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.126274" elapsed="0.107203"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.234072" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.125165" elapsed="0.109989"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.122593" elapsed="0.112749"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.121863" elapsed="0.113580"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.120436" elapsed="0.115166"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.119745" elapsed="0.115976"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.236918" level="INFO">${next} = 18304</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.236116" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.238240" level="INFO">${current_port} = 18304</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.237346" elapsed="0.000992"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.114594" elapsed="0.123875"/>
</kw>
<msg time="2026-08-15T23:56:11.238556" level="INFO">Repeating keyword, round 475/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.241142" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.240895" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.240850" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.241987" level="INFO">${current_Date} = 2026-08-15 23:56:11.242</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.241606" elapsed="0.000441"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.243090" level="INFO">${ellapsed_seconds} = 2619.095</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.242377" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.243894" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.243330" elapsed="0.000621"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.243263" elapsed="0.000712"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.240329" elapsed="0.003693"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.244539" level="INFO">${number} = 475</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.244173" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.246099" level="INFO">${number} = 475</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.245730" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.248088" level="INFO">${device-port} = 18304</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.247281" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.250712" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.284414" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.284652" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.250607" elapsed="0.034105"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.285653" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:11.285829" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.284928" elapsed="0.001101">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.284877" elapsed="0.001255">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.250324" elapsed="0.036090">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.249842" elapsed="0.036715"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.287452" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18304 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.360594" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.360888" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.286955" elapsed="0.073994"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.361082" elapsed="0.000125"/>
</return>
<msg time="2026-08-15T23:56:11.361636" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.249408" elapsed="0.112339"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.362389" elapsed="0.000959"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.248603" elapsed="0.114977"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.246830" elapsed="0.116945"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.246285" elapsed="0.117642"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.245283" elapsed="0.118773"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.244721" elapsed="0.119433"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.365330" level="INFO">${next} = 18305</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.364503" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.366671" level="INFO">${current_port} = 18305</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.365759" elapsed="0.001006"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.239039" elapsed="0.127932"/>
</kw>
<msg time="2026-08-15T23:56:11.367060" level="INFO">Repeating keyword, round 476/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.369096" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.368938" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.368909" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.369689" level="INFO">${current_Date} = 2026-08-15 23:56:11.370</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.369457" elapsed="0.000270"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.370410" level="INFO">${ellapsed_seconds} = 2618.967</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.369962" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.370907" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.370545" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.370519" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.368571" elapsed="0.002513"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.371836" level="INFO">${number} = 476</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.371287" elapsed="0.000588"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.373871" level="INFO">${number} = 476</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.373365" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.376635" level="INFO">${device-port} = 18305</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.375531" elapsed="0.001214"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.380360" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.415870" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.416124" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.380102" elapsed="0.036089"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.417263" elapsed="0.000074"/>
</kw>
<msg time="2026-08-15T23:56:11.417425" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.416433" elapsed="0.001109">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.416376" elapsed="0.001266">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.379714" elapsed="0.038269">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.379106" elapsed="0.039119"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.419168" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18305 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.483622" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.483863" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.418603" elapsed="0.065319"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.484036" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:11.484448" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.378499" elapsed="0.106060"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.485166" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.377387" elapsed="0.108874"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.374893" elapsed="0.111559"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.374132" elapsed="0.112578"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.372719" elapsed="0.114171"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.372095" elapsed="0.114897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.488184" level="INFO">${next} = 18306</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.487364" elapsed="0.000880"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.489596" level="INFO">${current_port} = 18306</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.488669" elapsed="0.001022"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.367603" elapsed="0.122278"/>
</kw>
<msg time="2026-08-15T23:56:11.489973" level="INFO">Repeating keyword, round 477/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.492299" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.492145" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.492118" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.492846" level="INFO">${current_Date} = 2026-08-15 23:56:11.493</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.492600" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.493531" level="INFO">${ellapsed_seconds} = 2618.844</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.493094" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.494027" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.493666" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.493640" elapsed="0.000498"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.491776" elapsed="0.002425"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.494938" level="INFO">${number} = 477</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.494403" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.497000" level="INFO">${number} = 477</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.496501" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.499829" level="INFO">${device-port} = 18306</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.498658" elapsed="0.001287"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.503690" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.535753" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.536014" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.503341" elapsed="0.032733"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.536975" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:11.537108" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.536239" elapsed="0.001056">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.536193" elapsed="0.001206">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.502915" elapsed="0.034756">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.502290" elapsed="0.035554"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.538674" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18306 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.604225" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.604434" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.538196" elapsed="0.066293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.604664" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:11.605105" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.501674" elapsed="0.103540"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.605762" elapsed="0.000890"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.500556" elapsed="0.106322"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.498027" elapsed="0.109076"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.497265" elapsed="0.109943"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.495873" elapsed="0.111459"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.495220" elapsed="0.112205"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.608559" level="INFO">${next} = 18307</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.607768" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.609941" level="INFO">${current_port} = 18307</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.609032" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.490402" elapsed="0.119767"/>
</kw>
<msg time="2026-08-15T23:56:11.610255" level="INFO">Repeating keyword, round 478/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.612355" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.612246" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.612223" elapsed="0.000196"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.612754" level="INFO">${current_Date} = 2026-08-15 23:56:11.613</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.612597" elapsed="0.000184"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.613256" level="INFO">${ellapsed_seconds} = 2618.724</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.612948" elapsed="0.000334"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.613613" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.613352" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.613334" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.612005" elapsed="0.001734"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.614272" level="INFO">${number} = 478</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.613906" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.615727" level="INFO">${number} = 478</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.615385" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.617687" level="INFO">${device-port} = 18307</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.616916" elapsed="0.000850"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.622683" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.659696" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.659953" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.622579" elapsed="0.037434"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.660912" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:11.661048" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.660177" elapsed="0.000976">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.660131" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.622165" elapsed="0.039342">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.621668" elapsed="0.040045"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.662582" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18307 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.728042" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.728258" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.662091" elapsed="0.066223"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.728425" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:11.728883" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.619598" elapsed="0.109403"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.729611" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.618219" elapsed="0.112531"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.616446" elapsed="0.114573"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.615929" elapsed="0.115198"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.614913" elapsed="0.116341"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.614454" elapsed="0.116900"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.732540" level="INFO">${next} = 18308</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.731704" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.734237" level="INFO">${current_port} = 18308</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.733054" elapsed="0.001318"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.610683" elapsed="0.123861"/>
</kw>
<msg time="2026-08-15T23:56:11.734668" level="INFO">Repeating keyword, round 479/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.736959" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.736798" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.736772" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.737447" level="INFO">${current_Date} = 2026-08-15 23:56:11.737</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.737242" elapsed="0.000239"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.738099" level="INFO">${ellapsed_seconds} = 2618.6</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.737674" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.738542" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.738227" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.738202" elapsed="0.000445"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.736485" elapsed="0.002230"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.739406" level="INFO">${number} = 479</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.738936" elapsed="0.000505"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.741338" level="INFO">${number} = 479</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.740885" elapsed="0.000495"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.743884" level="INFO">${device-port} = 18308</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.742948" elapsed="0.001023"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.746724" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.775915" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.776158" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.746613" elapsed="0.029606"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.777169" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:11.777310" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.776400" elapsed="0.001127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.776349" elapsed="0.001434">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.746329" elapsed="0.031776">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.745682" elapsed="0.032568"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.779168" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18308 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.847929" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.848150" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.778599" elapsed="0.069608"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.848323" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:11.848752" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.745261" elapsed="0.103668"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.849581" elapsed="0.000975"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.744431" elapsed="0.106361"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.742311" elapsed="0.108755"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.741600" elapsed="0.109575"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.740274" elapsed="0.111030"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.739646" elapsed="0.111757"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.852585" level="INFO">${next} = 18309</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.851756" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.854062" level="INFO">${current_port} = 18309</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.853088" elapsed="0.001079"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.735397" elapsed="0.118903"/>
</kw>
<msg time="2026-08-15T23:56:11.854391" level="INFO">Repeating keyword, round 480/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.856772" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.856612" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.856584" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.857400" level="INFO">${current_Date} = 2026-08-15 23:56:11.857</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.857156" elapsed="0.000283"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.858152" level="INFO">${ellapsed_seconds} = 2618.48</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.857656" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.858694" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.858296" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.858270" elapsed="0.000568"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.856128" elapsed="0.002781"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.859658" level="INFO">${number} = 480</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.859134" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.861759" level="INFO">${number} = 480</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.861271" elapsed="0.000526"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.864705" level="INFO">${device-port} = 18309</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.863530" elapsed="0.001324"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.868562" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:11.900443" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.900681" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.868460" elapsed="0.032289"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.901737" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:11.901919" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:11.900988" elapsed="0.001040">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:11.900937" elapsed="0.001187">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.868167" elapsed="0.034232">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.867384" elapsed="0.035337"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.903681" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18309 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:11.971586" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:11.971834" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.903185" elapsed="0.068709"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:11.972009" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:11.972414" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.866722" elapsed="0.105808"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:11.973134" elapsed="0.000895"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.865507" elapsed="0.108711"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.862858" elapsed="0.111550"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.862047" elapsed="0.112497"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.860599" elapsed="0.114072"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.859941" elapsed="0.114828"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.975964" level="INFO">${next} = 18310</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.975161" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.977275" level="INFO">${current_port} = 18310</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:11.976383" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.854956" elapsed="0.122542"/>
</kw>
<msg time="2026-08-15T23:56:11.977584" level="INFO">Repeating keyword, round 481/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:11.980174" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:11.979927" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.979882" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.981034" level="INFO">${current_Date} = 2026-08-15 23:56:11.981</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:11.980652" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:11.982151" level="INFO">${ellapsed_seconds} = 2618.356</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:11.981435" elapsed="0.000775"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:11.982937" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:11.982365" elapsed="0.000632"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:11.982324" elapsed="0.000697"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:11.979366" elapsed="0.003700"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.983574" level="INFO">${number} = 481</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.983210" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.985054" level="INFO">${number} = 481</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.984694" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:11.987052" level="INFO">${device-port} = 18310</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:11.986247" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:11.992310" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.024509" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.024736" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:11.992211" elapsed="0.032584"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.025734" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:12.025907" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.025018" elapsed="0.001083">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.024968" elapsed="0.001234">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:11.991919" elapsed="0.034600">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:11.988907" elapsed="0.037761"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.027577" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18310 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.096046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.096260" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.027083" elapsed="0.069232"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.096428" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:12.096919" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:11.988407" elapsed="0.108632"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.097625" elapsed="0.000972"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:11.987572" elapsed="0.111218"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:11.985768" elapsed="0.113287"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:11.985248" elapsed="0.113910"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.984246" elapsed="0.115034"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:11.983754" elapsed="0.115619"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.100569" level="INFO">${next} = 18311</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.099733" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.102074" level="INFO">${current_port} = 18311</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.101097" elapsed="0.001077"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:11.978081" elapsed="0.124221"/>
</kw>
<msg time="2026-08-15T23:56:12.102460" level="INFO">Repeating keyword, round 482/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.104211" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.104055" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.104029" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.104790" level="INFO">${current_Date} = 2026-08-15 23:56:12.105</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.104551" elapsed="0.000302"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.105503" level="INFO">${ellapsed_seconds} = 2618.232</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.105064" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.106014" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.105639" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.105613" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.103696" elapsed="0.002494"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.106986" level="INFO">${number} = 482</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.106425" elapsed="0.000599"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.109076" level="INFO">${number} = 482</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.108538" elapsed="0.000577"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.111644" level="INFO">${device-port} = 18311</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.110864" elapsed="0.000861"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.114478" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.147953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.148205" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.114376" elapsed="0.033891"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.149268" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:12.149414" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.148443" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.148395" elapsed="0.001225">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.113837" elapsed="0.036097">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.113427" elapsed="0.036898"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.151254" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18311 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.230386" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.230624" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.150711" elapsed="0.079971"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.230848" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:56:12.231306" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.113014" elapsed="0.118407"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.232042" elapsed="0.000963"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.112183" elapsed="0.121020"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.110112" elapsed="0.123282"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.109339" elapsed="0.124158"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.107896" elapsed="0.125731"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.107241" elapsed="0.126512"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.235032" level="INFO">${next} = 18312</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.234188" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.236422" level="INFO">${current_port} = 18312</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.235483" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.102910" elapsed="0.133742"/>
</kw>
<msg time="2026-08-15T23:56:12.236749" level="INFO">Repeating keyword, round 483/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.239188" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.239063" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.239043" elapsed="0.000210"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.239742" level="INFO">${current_Date} = 2026-08-15 23:56:12.239</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.239402" elapsed="0.000367"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.240264" level="INFO">${ellapsed_seconds} = 2618.098</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.239938" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.240615" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.240363" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.240343" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.238731" elapsed="0.002019"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.241308" level="INFO">${number} = 483</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.240929" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.242790" level="INFO">${number} = 483</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.242444" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.244835" level="INFO">${device-port} = 18312</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.244020" elapsed="0.000899"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.247652" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.276006" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.276157" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.247374" elapsed="0.028821"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.276765" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:12.276883" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.276305" elapsed="0.000711">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.276273" elapsed="0.000807">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.247092" elapsed="0.030171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.246667" elapsed="0.030688"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.277905" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18312 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.344117" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.344328" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.277576" elapsed="0.066807"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.344492" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:12.344945" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.246241" elapsed="0.098816"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.345613" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.245376" elapsed="0.101394"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.243535" elapsed="0.103483"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.243000" elapsed="0.104119"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.241966" elapsed="0.105278"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.241494" elapsed="0.105844"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.348473" level="INFO">${next} = 18313</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.347683" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.349786" level="INFO">${current_port} = 18313</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.348936" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.237303" elapsed="0.112804"/>
</kw>
<msg time="2026-08-15T23:56:12.350192" level="INFO">Repeating keyword, round 484/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.352695" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.352447" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.352405" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.353624" level="INFO">${current_Date} = 2026-08-15 23:56:12.353</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.353279" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.354784" level="INFO">${ellapsed_seconds} = 2617.984</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.354100" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.355187" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.354947" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.354928" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.351918" elapsed="0.003394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.355841" level="INFO">${number} = 484</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.355458" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.357268" level="INFO">${number} = 484</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.356929" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.359435" level="INFO">${device-port} = 18313</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.358617" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.362073" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.399907" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.400131" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.361926" elapsed="0.038265"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.401117" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:12.401260" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.400357" elapsed="0.001012">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.400311" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.361624" elapsed="0.040129">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.361233" elapsed="0.040826"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.402975" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18313 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.472118" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.472328" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.402431" elapsed="0.069952"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.472493" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:12.472939" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.360789" elapsed="0.112263"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.473602" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.360004" elapsed="0.114699"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.358025" elapsed="0.116917"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.357454" elapsed="0.117589"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.356471" elapsed="0.118695"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.356027" elapsed="0.119234"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.476396" level="INFO">${next} = 18314</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.475606" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.477724" level="INFO">${current_port} = 18314</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.476856" elapsed="0.001108"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.350611" elapsed="0.127492"/>
</kw>
<msg time="2026-08-15T23:56:12.478191" level="INFO">Repeating keyword, round 485/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.480704" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.480458" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.480412" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.481562" level="INFO">${current_Date} = 2026-08-15 23:56:12.481</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.481219" elapsed="0.000405"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.482727" level="INFO">${ellapsed_seconds} = 2617.856</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.482040" elapsed="0.000746"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.483153" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.482915" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.482895" elapsed="0.000337"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.479922" elapsed="0.003355"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.483789" level="INFO">${number} = 485</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.483424" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.485248" level="INFO">${number} = 485</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.484904" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.487252" level="INFO">${device-port} = 18314</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.486457" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.489889" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.524296" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.524519" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.489734" elapsed="0.034843"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.525489" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:12.525623" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.524742" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.524696" elapsed="0.001293">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.489447" elapsed="0.036818">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.489025" elapsed="0.037382"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.527280" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18314 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.592419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.592675" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.526759" elapsed="0.065972"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.592888" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:12.593336" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.488586" elapsed="0.104860"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.594155" elapsed="0.000948"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.487767" elapsed="0.107540"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.486004" elapsed="0.109505"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.485436" elapsed="0.110182"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.484441" elapsed="0.111311"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.483987" elapsed="0.111904"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.597124" level="INFO">${next} = 18315</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.596271" elapsed="0.000919"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.598594" level="INFO">${current_port} = 18315</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.597580" elapsed="0.001118"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.478615" elapsed="0.120264"/>
</kw>
<msg time="2026-08-15T23:56:12.598975" level="INFO">Repeating keyword, round 486/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.601902" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.601541" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.601494" elapsed="0.000569"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.602882" level="INFO">${current_Date} = 2026-08-15 23:56:12.603</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.602509" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.603384" level="INFO">${ellapsed_seconds} = 2617.734</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.603061" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.603728" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.603481" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.603463" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.600972" elapsed="0.002900"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.604387" level="INFO">${number} = 486</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.604020" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.605880" level="INFO">${number} = 486</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.605479" elapsed="0.000428"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.607873" level="INFO">${device-port} = 18315</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.607073" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.610481" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.648476" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.648698" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.610379" elapsed="0.038377"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.649699" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:12.649871" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.648964" elapsed="0.001019">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.648917" elapsed="0.001159">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.610104" elapsed="0.040250">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.609679" elapsed="0.040894"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.651449" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18315 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.743376" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.743656" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.650963" elapsed="0.092751"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.743886" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:56:12.744355" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.609201" elapsed="0.135263"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.745109" elapsed="0.000972"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.608395" elapsed="0.137880"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.606600" elapsed="0.139869"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.606070" elapsed="0.140503"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.605033" elapsed="0.141668"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.604568" elapsed="0.142272"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.748020" level="INFO">${next} = 18316</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.747199" elapsed="0.000881"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.749364" level="INFO">${current_port} = 18316</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.748443" elapsed="0.001063"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.599527" elapsed="0.150118"/>
</kw>
<msg time="2026-08-15T23:56:12.749733" level="INFO">Repeating keyword, round 487/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.752366" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.752121" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.752076" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.753218" level="INFO">${current_Date} = 2026-08-15 23:56:12.753</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.752862" elapsed="0.000418"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.754187" level="INFO">${ellapsed_seconds} = 2617.584</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.753660" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.754533" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.754284" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.754265" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.751548" elapsed="0.003109"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.755182" level="INFO">${number} = 487</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.754816" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.756617" level="INFO">${number} = 487</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.756277" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.758618" level="INFO">${device-port} = 18316</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.757831" elapsed="0.000868"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.761252" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.792438" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.792661" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.761147" elapsed="0.031572"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.793670" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:12.793845" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.792930" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.792882" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.760861" elapsed="0.033580">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.760419" elapsed="0.034165"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.795457" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18316 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.863931" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.864164" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.794970" elapsed="0.069251"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.864340" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:12.864768" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.760004" elapsed="0.104922"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.865563" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.759200" elapsed="0.107496"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.757345" elapsed="0.109598"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.756814" elapsed="0.110235"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.755826" elapsed="0.111349"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.755364" elapsed="0.111908"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.868426" level="INFO">${next} = 18317</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.867620" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.869797" level="INFO">${current_port} = 18317</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.868897" elapsed="0.001062"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.750244" elapsed="0.119847"/>
</kw>
<msg time="2026-08-15T23:56:12.870178" level="INFO">Repeating keyword, round 488/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.872746" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.872498" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.872456" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.873838" level="INFO">${current_Date} = 2026-08-15 23:56:12.874</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.873436" elapsed="0.000459"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.874393" level="INFO">${ellapsed_seconds} = 2617.463</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.874069" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.874741" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:12.874490" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.874471" elapsed="0.000364"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.871961" elapsed="0.002921"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.875404" level="INFO">${number} = 488</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.875030" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.876860" level="INFO">${number} = 488</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.876501" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.878892" level="INFO">${device-port} = 18317</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.878085" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.881672" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:12.916540" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.916783" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.881406" elapsed="0.035467"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:12.917844" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:12.917987" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:12.917053" elapsed="0.001044">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:12.917004" elapsed="0.001187">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:12.881106" elapsed="0.037368">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:12.880659" elapsed="0.038034"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:12.919573" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18317 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:12.988528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:12.988911" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:12.919081" elapsed="0.069897"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:12.989174" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:56:12.989716" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:12.880240" elapsed="0.109646"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:12.990554" elapsed="0.001035"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:12.879422" elapsed="0.112418"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:12.877604" elapsed="0.114453"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:12.877050" elapsed="0.115117"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.876054" elapsed="0.116253"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:12.875586" elapsed="0.116831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.993758" level="INFO">${next} = 18318</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:12.992837" elapsed="0.001036"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:12.995186" level="INFO">${current_port} = 18318</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:12.994245" elapsed="0.001041"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.870619" elapsed="0.124800"/>
</kw>
<msg time="2026-08-15T23:56:12.995509" level="INFO">Repeating keyword, round 489/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:12.998190" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:12.997937" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:12.997892" elapsed="0.000444"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:12.999076" level="INFO">${current_Date} = 2026-08-15 23:56:12.999</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:12.998681" elapsed="0.000457"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.000206" level="INFO">${ellapsed_seconds} = 2617.338</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:12.999472" elapsed="0.000793"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.001024" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.000424" elapsed="0.000846"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.000381" elapsed="0.000964"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:12.997356" elapsed="0.004107"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.002354" level="INFO">${number} = 489</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.001887" elapsed="0.000496"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.003841" level="INFO">${number} = 489</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.003477" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.006149" level="INFO">${device-port} = 18318</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.005226" elapsed="0.001015"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.009399" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.040875" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.041191" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.009036" elapsed="0.032231"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.042385" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:13.042534" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.041504" elapsed="0.001269">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.041436" elapsed="0.001482">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.008676" elapsed="0.034567">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.008209" elapsed="0.035190"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.044367" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18318 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.112036" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.112346" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.043792" elapsed="0.068612"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.112549" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:56:13.113112" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.007694" elapsed="0.105533"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.113882" elapsed="0.000949"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.006746" elapsed="0.108286"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.004589" elapsed="0.110640"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.004039" elapsed="0.111295"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.003026" elapsed="0.112438"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.002548" elapsed="0.113014"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.116744" level="INFO">${next} = 18319</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.115962" elapsed="0.000890"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.118090" level="INFO">${current_port} = 18319</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.117300" elapsed="0.000851"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:12.996010" elapsed="0.122225"/>
</kw>
<msg time="2026-08-15T23:56:13.118291" level="INFO">Repeating keyword, round 490/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.119987" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.119821" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.119773" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.120590" level="INFO">${current_Date} = 2026-08-15 23:56:13.120</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.120351" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.121340" level="INFO">${ellapsed_seconds} = 2617.217</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.120866" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.121844" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.121478" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.121452" elapsed="0.000506"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.119457" elapsed="0.002566"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.122744" level="INFO">${number} = 490</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.122230" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.124788" level="INFO">${number} = 490</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.124307" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.127600" level="INFO">${device-port} = 18319</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.126487" elapsed="0.001225"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.131053" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.169296" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.169567" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.130946" elapsed="0.038687"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.170690" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:13.170873" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.169871" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.169773" elapsed="0.001322">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.130485" elapsed="0.040930">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.130093" elapsed="0.041566"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.172619" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18319 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.254255" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.254523" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.172080" elapsed="0.082501"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.254711" elapsed="0.000133"/>
</return>
<msg time="2026-08-15T23:56:13.255223" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.129531" elapsed="0.125800"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.255970" elapsed="0.000994"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.128345" elapsed="0.128813"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.125858" elapsed="0.131489"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.125092" elapsed="0.132360"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.123646" elapsed="0.133933"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.123021" elapsed="0.134656"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.258903" level="INFO">${next} = 18320</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.258073" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.260247" level="INFO">${current_port} = 18320</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.259333" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.118596" elapsed="0.141891"/>
</kw>
<msg time="2026-08-15T23:56:13.260578" level="INFO">Repeating keyword, round 491/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.263462" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.263191" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.263141" elapsed="0.000477"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.264446" level="INFO">${current_Date} = 2026-08-15 23:56:13.264</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.264048" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.265914" level="INFO">${ellapsed_seconds} = 2617.073</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.264973" elapsed="0.000975"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.266293" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.266038" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.266013" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.262537" elapsed="0.003882"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.266944" level="INFO">${number} = 491</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.266564" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.268566" level="INFO">${number} = 491</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.268221" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.270606" level="INFO">${device-port} = 18320</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.269796" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.273457" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.300388" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.300611" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.273352" elapsed="0.027298"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.301391" elapsed="0.000037"/>
</kw>
<msg time="2026-08-15T23:56:13.301479" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.300841" elapsed="0.000788">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.300775" elapsed="0.000918">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.273057" elapsed="0.028853">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.272378" elapsed="0.029626"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.302569" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18320 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.372096" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.372409" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.302243" elapsed="0.070239"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.372677" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:56:13.373311" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.271965" elapsed="0.101482"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.374270" elapsed="0.001147"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.271149" elapsed="0.104463"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.269345" elapsed="0.106504"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.268760" elapsed="0.107199"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.267574" elapsed="0.108516"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.267126" elapsed="0.109061"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.377399" level="INFO">${next} = 18321</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.376542" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.378745" level="INFO">${current_port} = 18321</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.377871" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.261131" elapsed="0.117901"/>
</kw>
<msg time="2026-08-15T23:56:13.379119" level="INFO">Repeating keyword, round 492/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.381314" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.381200" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.381180" elapsed="0.000198"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.381752" level="INFO">${current_Date} = 2026-08-15 23:56:13.382</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.381579" elapsed="0.000200"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.382275" level="INFO">${ellapsed_seconds} = 2616.955</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.381948" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.382629" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.382378" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.382360" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.380948" elapsed="0.001804"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.383286" level="INFO">${number} = 492</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.382919" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.384811" level="INFO">${number} = 492</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.384421" elapsed="0.000419"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.386883" level="INFO">${device-port} = 18321</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.386072" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.390048" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.423508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.423748" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.389937" elapsed="0.033911"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.424888" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:13.425033" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.424033" elapsed="0.001110">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.423982" elapsed="0.001255">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.389631" elapsed="0.035890">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.388996" elapsed="0.036746"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.426608" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18321 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.491947" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.492248" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.426124" elapsed="0.066186"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.492460" elapsed="0.000138"/>
</return>
<msg time="2026-08-15T23:56:13.493040" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.388434" elapsed="0.104726"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.493852" elapsed="0.001024"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.387438" elapsed="0.107638"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.385544" elapsed="0.109729"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.385002" elapsed="0.110377"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.383960" elapsed="0.111550"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.383483" elapsed="0.112129"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.496925" level="INFO">${next} = 18322</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.496030" elapsed="0.000960"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.498292" level="INFO">${current_port} = 18322</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.497365" elapsed="0.001025"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.379598" elapsed="0.118922"/>
</kw>
<msg time="2026-08-15T23:56:13.498608" level="INFO">Repeating keyword, round 493/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.501119" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.501003" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.500982" elapsed="0.000201"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.501554" level="INFO">${current_Date} = 2026-08-15 23:56:13.501</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.501337" elapsed="0.000250"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.502098" level="INFO">${ellapsed_seconds} = 2616.836</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.501741" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.502460" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.502202" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.502183" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.500565" elapsed="0.002020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.503164" level="INFO">${number} = 493</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.502730" elapsed="0.000461"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.504636" level="INFO">${number} = 493</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.504270" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.506663" level="INFO">${device-port} = 18322</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.505875" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.511762" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.540213" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.540476" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.511657" elapsed="0.028882"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.541501" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:13.541639" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.540711" elapsed="0.001179">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.540664" elapsed="0.001329">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.511362" elapsed="0.030914">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.508445" elapsed="0.033973"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.543288" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18322 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.608522" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.608861" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.542762" elapsed="0.066161"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.609066" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:56:13.609552" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.508023" elapsed="0.101642"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.610317" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.507204" elapsed="0.104275"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.505381" elapsed="0.106286"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.504844" elapsed="0.106924"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.503818" elapsed="0.108128"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.503349" elapsed="0.108695"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.613132" level="INFO">${next} = 18323</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.612441" elapsed="0.000729"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.613989" level="INFO">${current_port} = 18323</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.613401" elapsed="0.000648"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.499156" elapsed="0.114974"/>
</kw>
<msg time="2026-08-15T23:56:13.614186" level="INFO">Repeating keyword, round 494/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.615837" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.615660" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.615633" elapsed="0.000296"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.616436" level="INFO">${current_Date} = 2026-08-15 23:56:13.616</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.616195" elapsed="0.000279"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.617154" level="INFO">${ellapsed_seconds} = 2616.721</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.616683" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.617633" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.617290" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.617264" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.615326" elapsed="0.002500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.618564" level="INFO">${number} = 494</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.618048" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.620610" level="INFO">${number} = 494</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.620106" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.623395" level="INFO">${device-port} = 18323</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.622293" elapsed="0.001214"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.626577" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.659988" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.660236" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.626475" elapsed="0.033849"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.661339" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:13.661485" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.660509" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.660456" elapsed="0.001246">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.626011" elapsed="0.036035">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.625588" elapsed="0.036695"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.663224" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18323 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.728071" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.728337" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.662666" elapsed="0.065728"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.728521" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:56:13.729018" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.625179" elapsed="0.103948"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.729708" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.624149" elapsed="0.106745"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.621634" elapsed="0.109460"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.620893" elapsed="0.110306"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.619470" elapsed="0.111858"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.618840" elapsed="0.112586"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.732628" level="INFO">${next} = 18324</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.731774" elapsed="0.000913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.734026" level="INFO">${current_port} = 18324</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.733112" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.614479" elapsed="0.119773"/>
</kw>
<msg time="2026-08-15T23:56:13.734339" level="INFO">Repeating keyword, round 495/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.736976" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.736709" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.736666" elapsed="0.000403"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.737501" level="INFO">${current_Date} = 2026-08-15 23:56:13.737</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.737274" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.738210" level="INFO">${ellapsed_seconds} = 2616.6</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.737745" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.738686" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.738346" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.738320" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.736128" elapsed="0.002757"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.739599" level="INFO">${number} = 495</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.739087" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.741658" level="INFO">${number} = 495</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.741181" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.744442" level="INFO">${device-port} = 18324</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.743320" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.748433" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.779495" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.779727" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.747981" elapsed="0.031804"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.780768" elapsed="0.000091"/>
</kw>
<msg time="2026-08-15T23:56:13.780942" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.779998" elapsed="0.001151">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.779947" elapsed="0.001302">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.747446" elapsed="0.034090">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.746893" elapsed="0.034787"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.782550" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18324 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.847907" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.848124" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.782064" elapsed="0.066115"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.848291" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:13.848693" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.746293" elapsed="0.102547"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.849402" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.745190" elapsed="0.105283"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.742667" elapsed="0.107994"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.741938" elapsed="0.108822"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.740531" elapsed="0.110400"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.739877" elapsed="0.111152"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.852198" level="INFO">${next} = 18325</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.851391" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.853522" level="INFO">${current_port} = 18325</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.852619" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.734786" elapsed="0.118956"/>
</kw>
<msg time="2026-08-15T23:56:13.853891" level="INFO">Repeating keyword, round 496/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.856399" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.856156" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.856114" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.857321" level="INFO">${current_Date} = 2026-08-15 23:56:13.857</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.856967" elapsed="0.000413"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.858433" level="INFO">${ellapsed_seconds} = 2616.48</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.857712" elapsed="0.000779"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.859252" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.858647" elapsed="0.000731"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.858607" elapsed="0.000824"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.855592" elapsed="0.003940"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.860313" level="INFO">${number} = 496</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.859896" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.861748" level="INFO">${number} = 496</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.861404" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.863757" level="INFO">${device-port} = 18325</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.862959" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.866322" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:13.899907" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.900144" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.866224" elapsed="0.033983"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.901133" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:13.901272" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:13.900379" elapsed="0.001022">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:13.900332" elapsed="0.001164">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.865945" elapsed="0.035824">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.865517" elapsed="0.036509"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.902917" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18325 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:13.968252" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:13.968495" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.902388" elapsed="0.066164"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:13.968675" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:56:13.969156" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.865098" elapsed="0.104198"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:13.969983" elapsed="0.000980"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.864296" elapsed="0.106860"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.862483" elapsed="0.108865"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.861953" elapsed="0.109497"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.860959" elapsed="0.110615"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.860494" elapsed="0.111178"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.972900" level="INFO">${next} = 18326</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.972067" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.974232" level="INFO">${current_port} = 18326</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:13.973331" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.854316" elapsed="0.120140"/>
</kw>
<msg time="2026-08-15T23:56:13.974668" level="INFO">Repeating keyword, round 497/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:13.977295" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:13.977051" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.977006" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.978155" level="INFO">${current_Date} = 2026-08-15 23:56:13.978</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:13.977766" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:13.979180" level="INFO">${ellapsed_seconds} = 2616.359</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:13.978598" elapsed="0.000609"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:13.979526" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:13.979278" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:13.979259" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:13.976484" elapsed="0.003166"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.980284" level="INFO">${number} = 497</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.979909" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.981754" level="INFO">${number} = 497</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.981407" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:13.983833" level="INFO">${device-port} = 18326</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:13.983017" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:13.986451" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.016028" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.016254" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:13.986344" elapsed="0.029971"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.017270" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:14.017407" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.016485" elapsed="0.001142">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.016437" elapsed="0.001296">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:13.986039" elapsed="0.032016">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:13.985617" elapsed="0.032586"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.019081" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18326 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.083911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.084123" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.018558" elapsed="0.065620"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.084290" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:14.084696" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:13.985197" elapsed="0.099652"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.085418" elapsed="0.000904"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:13.984373" elapsed="0.102162"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:13.982522" elapsed="0.104208"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:13.981965" elapsed="0.104924"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.980954" elapsed="0.106065"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:13.980470" elapsed="0.106646"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.088264" level="INFO">${next} = 18327</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.087464" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.089583" level="INFO">${current_port} = 18327</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.088689" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:13.975198" elapsed="0.114672"/>
</kw>
<msg time="2026-08-15T23:56:14.089964" level="INFO">Repeating keyword, round 498/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.092683" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.092439" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.092396" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.093618" level="INFO">${current_Date} = 2026-08-15 23:56:14.093</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.093269" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.094879" level="INFO">${ellapsed_seconds} = 2616.244</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.094129" elapsed="0.000794"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.095239" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.095000" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.094980" elapsed="0.000338"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.091905" elapsed="0.003460"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.095902" level="INFO">${number} = 498</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.095511" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.097340" level="INFO">${number} = 498</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.097000" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.099352" level="INFO">${device-port} = 18327</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.098547" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.101928" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.136146" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.136405" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.101819" elapsed="0.034650"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.137444" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:14.137581" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.136665" elapsed="0.001023">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.136612" elapsed="0.001178">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.101503" elapsed="0.036617">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.101116" elapsed="0.037220"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.139244" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18327 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.214161" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.214399" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.138703" elapsed="0.075754"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.214582" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:14.215056" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.100681" elapsed="0.114486"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.215738" elapsed="0.000932"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.099897" elapsed="0.117005"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.098094" elapsed="0.118998"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.097526" elapsed="0.119669"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.096531" elapsed="0.120838"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.096084" elapsed="0.121391"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.218649" level="INFO">${next} = 18328</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.217876" elapsed="0.000832"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.220028" level="INFO">${current_port} = 18328</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.219128" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.090424" elapsed="0.129832"/>
</kw>
<msg time="2026-08-15T23:56:14.220346" level="INFO">Repeating keyword, round 499/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.222955" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.222675" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.222632" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.223773" level="INFO">${current_Date} = 2026-08-15 23:56:14.224</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.223424" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.224937" level="INFO">${ellapsed_seconds} = 2616.113</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.224203" elapsed="0.000842"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.225749" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.225212" elapsed="0.000691"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.225169" elapsed="0.000762"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.222142" elapsed="0.003835"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.226488" level="INFO">${number} = 499</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.226122" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.227957" level="INFO">${number} = 499</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.227596" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.229942" level="INFO">${device-port} = 18328</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.229145" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.232485" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.260068" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.260295" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.232380" elapsed="0.027974"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.261299" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:14.261436" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.260524" elapsed="0.001111">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.260477" elapsed="0.001257">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.232093" elapsed="0.029958">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.231679" elapsed="0.030519"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.263121" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18328 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.332259" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.332479" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.262549" elapsed="0.069987"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.332657" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:14.333182" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.231265" elapsed="0.102044"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.333943" elapsed="0.000913"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.230461" elapsed="0.104595"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.228664" elapsed="0.106587"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.228140" elapsed="0.107216"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.227143" elapsed="0.108339"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.226670" elapsed="0.108910"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.336895" level="INFO">${next} = 18329</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.335973" elapsed="0.000996"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.338132" level="INFO">${current_port} = 18329</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.337343" elapsed="0.000854"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.220782" elapsed="0.117500"/>
</kw>
<msg time="2026-08-15T23:56:14.338337" level="INFO">Repeating keyword, round 500/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.339935" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.339753" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.339726" elapsed="0.000300"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.340514" level="INFO">${current_Date} = 2026-08-15 23:56:14.340</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.340288" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.341341" level="INFO">${ellapsed_seconds} = 2615.997</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.340869" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.341847" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.341482" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.341455" elapsed="0.000508"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.339419" elapsed="0.002621"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.342836" level="INFO">${number} = 500</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.342255" elapsed="0.000624"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.345045" level="INFO">${number} = 500</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.344461" elapsed="0.000623"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.347887" level="INFO">${device-port} = 18329</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.346742" elapsed="0.001259"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.351008" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.383548" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.383796" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.350693" elapsed="0.033200"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.384865" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:14.385007" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.384081" elapsed="0.001034">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.384027" elapsed="0.001181">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.350405" elapsed="0.035086">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.350014" elapsed="0.035704"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.386603" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18329 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.451964" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.452173" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.386115" elapsed="0.066113"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.452339" elapsed="0.000114"/>
</return>
<msg time="2026-08-15T23:56:14.452860" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.349573" elapsed="0.103402"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.453534" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.348686" elapsed="0.105947"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.346093" elapsed="0.108768"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.345320" elapsed="0.109647"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.343773" elapsed="0.111318"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.343117" elapsed="0.112072"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.456355" level="INFO">${next} = 18330</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.455533" elapsed="0.000882"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.457685" level="INFO">${current_port} = 18330</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.456777" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.338606" elapsed="0.119380"/>
</kw>
<msg time="2026-08-15T23:56:14.458074" level="INFO">Repeating keyword, round 501/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.460636" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.460393" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.460350" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.461171" level="INFO">${current_Date} = 2026-08-15 23:56:14.461</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.461009" elapsed="0.000188"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.461663" level="INFO">${ellapsed_seconds} = 2615.876</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.461345" elapsed="0.000344"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.462019" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.461759" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.461740" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.459785" elapsed="0.002357"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.462656" level="INFO">${number} = 501</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.462286" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.464106" level="INFO">${number} = 501</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.463741" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.466075" level="INFO">${device-port} = 18330</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.465281" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.468749" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.500063" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.500206" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.468506" elapsed="0.031738"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.500681" elapsed="0.000026"/>
</kw>
<msg time="2026-08-15T23:56:14.500742" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.500344" elapsed="0.000512">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.500319" elapsed="0.000587">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.468229" elapsed="0.032806">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.467835" elapsed="0.033264"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.501488" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18330 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.571916" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.572217" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.501261" elapsed="0.071044"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.572477" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:56:14.573109" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.467383" elapsed="0.105873"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.574070" elapsed="0.001186"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.466590" elapsed="0.108974"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.464835" elapsed="0.111096"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.464290" elapsed="0.111814"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.463293" elapsed="0.113021"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.462853" elapsed="0.113627"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.577678" level="INFO">${next} = 18331</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.577004" elapsed="0.000726"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.578954" level="INFO">${current_port} = 18331</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.578134" elapsed="0.000905"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.458512" elapsed="0.120643"/>
</kw>
<msg time="2026-08-15T23:56:14.579233" level="INFO">Repeating keyword, round 502/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.581499" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.581287" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.581240" elapsed="0.000392"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.582421" level="INFO">${current_Date} = 2026-08-15 23:56:14.582</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.582115" elapsed="0.000345"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.583139" level="INFO">${ellapsed_seconds} = 2615.755</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.582676" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.583663" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.583276" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.583251" elapsed="0.000540"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.580782" elapsed="0.003094"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.584441" level="INFO">${number} = 502</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.584067" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.585891" level="INFO">${number} = 502</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.585532" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.588023" level="INFO">${device-port} = 18331</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.587162" elapsed="0.000943"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.590698" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.624068" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.624355" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.590599" elapsed="0.033816"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.625558" elapsed="0.000095"/>
</kw>
<msg time="2026-08-15T23:56:14.625779" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.624622" elapsed="0.001405">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.624562" elapsed="0.001646">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.590176" elapsed="0.036468">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.589769" elapsed="0.037210"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.628075" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18331 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.692337" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.692600" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.627383" elapsed="0.065257"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.692749" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:56:14.693126" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.589356" elapsed="0.103842"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.693611" elapsed="0.000813"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.588547" elapsed="0.106006"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.586602" elapsed="0.108086"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.586079" elapsed="0.108676"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.585083" elapsed="0.109790"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.584622" elapsed="0.110364"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.696174" level="INFO">${next} = 18332</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.695425" elapsed="0.000787"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.697046" level="INFO">${current_port} = 18332</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.696458" elapsed="0.000649"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.579642" elapsed="0.117549"/>
</kw>
<msg time="2026-08-15T23:56:14.697248" level="INFO">Repeating keyword, round 503/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.698962" elapsed="0.000053"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.698773" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.698746" elapsed="0.000342"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.699545" level="INFO">${current_Date} = 2026-08-15 23:56:14.699</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.699307" elapsed="0.000274"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.700280" level="INFO">${ellapsed_seconds} = 2615.638</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.699787" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.700765" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.700414" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.700389" elapsed="0.000547"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.698427" elapsed="0.002574"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.701720" level="INFO">${number} = 503</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.701203" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.703777" level="INFO">${number} = 503</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.703294" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.706594" level="INFO">${device-port} = 18332</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.705483" elapsed="0.001224"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.709840" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.739832" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.740076" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.709720" elapsed="0.030415"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.741078" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:14.741214" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.740310" elapsed="0.001157">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.740262" elapsed="0.001317">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.709443" elapsed="0.032474">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.708842" elapsed="0.033222"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.742930" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18332 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.808404" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.808740" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.742414" elapsed="0.066432"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.809021" elapsed="0.000103"/>
</return>
<msg time="2026-08-15T23:56:14.809540" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.708396" elapsed="0.101268"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.810370" elapsed="0.001096"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.707387" elapsed="0.104294"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.704852" elapsed="0.107104"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.704072" elapsed="0.108001"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.702620" elapsed="0.109593"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.701995" elapsed="0.110327"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.813780" level="INFO">${next} = 18333</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.812702" elapsed="0.001229"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.815439" level="INFO">${current_port} = 18333</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.814414" elapsed="0.001128"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.697565" elapsed="0.118118"/>
</kw>
<msg time="2026-08-15T23:56:14.815777" level="INFO">Repeating keyword, round 504/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.818468" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.818216" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.818171" elapsed="0.000494"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.819215" level="INFO">${current_Date} = 2026-08-15 23:56:14.819</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.819039" elapsed="0.000203"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.819723" level="INFO">${ellapsed_seconds} = 2615.518</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.819393" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.820090" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.819836" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.819817" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.817638" elapsed="0.002579"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.820732" level="INFO">${number} = 504</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.820364" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.822194" level="INFO">${number} = 504</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.821844" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.824231" level="INFO">${device-port} = 18333</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.823434" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.827001" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.859966" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.860267" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.826897" elapsed="0.033435"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.861433" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:14.861583" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.860543" elapsed="0.001159">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.860482" elapsed="0.001357">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.826589" elapsed="0.035565">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.825986" elapsed="0.036426"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.863396" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18333 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:14.928737" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.929019" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.862840" elapsed="0.066237"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:14.929203" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:14.929664" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.825554" elapsed="0.104221"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:14.930416" elapsed="0.000975"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.824753" elapsed="0.106835"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.822986" elapsed="0.108795"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.822389" elapsed="0.109552"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.821384" elapsed="0.110684"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.820935" elapsed="0.111232"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.933350" level="INFO">${next} = 18334</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.932519" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.934719" level="INFO">${current_port} = 18334</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:14.933780" elapsed="0.001120"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.816300" elapsed="0.118739"/>
</kw>
<msg time="2026-08-15T23:56:14.935131" level="INFO">Repeating keyword, round 505/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:14.937953" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:14.937660" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.937601" elapsed="0.000498"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.938892" level="INFO">${current_Date} = 2026-08-15 23:56:14.939</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:14.938430" elapsed="0.000493"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:14.939415" level="INFO">${ellapsed_seconds} = 2615.398</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:14.939074" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.939764" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:14.939512" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:14.939493" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:14.936931" elapsed="0.002980"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.940427" level="INFO">${number} = 505</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.940058" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.941907" level="INFO">${number} = 505</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.941550" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:14.943938" level="INFO">${device-port} = 18334</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:14.943138" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.949100" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:14.980203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:14.980457" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.948991" elapsed="0.031526"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:14.981547" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:14.981689" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:14.980704" elapsed="0.001232">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:14.980652" elapsed="0.001387">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:14.948668" elapsed="0.033691">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:14.945707" elapsed="0.036801"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:14.983398" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18334 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.048067" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.048389" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:14.982902" elapsed="0.065549"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.048603" elapsed="0.000107"/>
</return>
<msg time="2026-08-15T23:56:15.049170" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:14.945290" elapsed="0.103997"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.049982" elapsed="0.001046"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:14.944457" elapsed="0.106777"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:14.942656" elapsed="0.108853"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:14.942093" elapsed="0.109607"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.941092" elapsed="0.110823"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:14.940611" elapsed="0.111413"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.053295" level="INFO">${next} = 18335</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.052403" elapsed="0.000957"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.054751" level="INFO">${current_port} = 18335</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.053750" elapsed="0.001189"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:14.935592" elapsed="0.119488"/>
</kw>
<msg time="2026-08-15T23:56:15.055175" level="INFO">Repeating keyword, round 506/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.057847" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.057566" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.057523" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.058888" level="INFO">${current_Date} = 2026-08-15 23:56:15.059</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.058418" elapsed="0.000513"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.059407" level="INFO">${ellapsed_seconds} = 2615.278</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.059082" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.059755" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.059504" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.059486" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.057036" elapsed="0.002861"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.060410" level="INFO">${number} = 506</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.060044" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.061865" level="INFO">${number} = 506</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.061505" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.063994" level="INFO">${device-port} = 18335</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.063184" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.066733" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.095902" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.096134" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.066627" elapsed="0.029565"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.097125" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:15.097283" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.096365" elapsed="0.001039">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.096317" elapsed="0.001183">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.066139" elapsed="0.031687">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.065728" elapsed="0.032331"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.098936" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18335 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.164357" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.164695" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.098415" elapsed="0.066342"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.164956" elapsed="0.000109"/>
</return>
<msg time="2026-08-15T23:56:15.165476" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.065318" elapsed="0.100274"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.166291" elapsed="0.001030"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.064512" elapsed="0.103011"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.062692" elapsed="0.105236"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.062115" elapsed="0.105927"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.061061" elapsed="0.107119"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.060591" elapsed="0.107698"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.169554" level="INFO">${next} = 18336</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.168668" elapsed="0.000950"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.170993" level="INFO">${current_port} = 18336</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.170045" elapsed="0.001047"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.055670" elapsed="0.115550"/>
</kw>
<msg time="2026-08-15T23:56:15.171307" level="INFO">Repeating keyword, round 507/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.173963" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.173676" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.173632" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.174886" level="INFO">${current_Date} = 2026-08-15 23:56:15.175</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.174434" elapsed="0.000516"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.175952" level="INFO">${ellapsed_seconds} = 2615.162</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.175286" elapsed="0.000693"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.176300" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.176049" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.176030" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.173138" elapsed="0.003287"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.176957" level="INFO">${number} = 507</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.176571" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.178406" level="INFO">${number} = 507</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.178063" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.180411" level="INFO">${device-port} = 18336</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.179603" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.183173" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.215936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.216187" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.182887" elapsed="0.033361"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.217242" elapsed="0.000081"/>
</kw>
<msg time="2026-08-15T23:56:15.217404" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.216431" elapsed="0.001195">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.216380" elapsed="0.001346">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.182574" elapsed="0.035492">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.182168" elapsed="0.036046"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.219108" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18336 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.284344" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.284595" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.218577" elapsed="0.066077"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.284781" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:56:15.285276" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.181734" elapsed="0.103654"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.286031" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.180952" elapsed="0.106230"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.179155" elapsed="0.108218"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.178604" elapsed="0.108873"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.177592" elapsed="0.110014"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.177142" elapsed="0.110564"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.288931" level="INFO">${next} = 18337</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.288106" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.290514" level="INFO">${current_port} = 18337</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.289574" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.171767" elapsed="0.118978"/>
</kw>
<msg time="2026-08-15T23:56:15.290947" level="INFO">Repeating keyword, round 508/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.292929" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.292747" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.292719" elapsed="0.000301"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.293517" level="INFO">${current_Date} = 2026-08-15 23:56:15.293</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.293287" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.294236" level="INFO">${ellapsed_seconds} = 2615.044</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.293764" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.294731" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.294373" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.294347" elapsed="0.000532"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.292410" elapsed="0.002540"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.295674" level="INFO">${number} = 508</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.295159" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.297721" level="INFO">${number} = 508</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.297242" elapsed="0.000517"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.300568" level="INFO">${device-port} = 18337</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.299439" elapsed="0.001244"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.303946" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.335553" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.335847" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.303723" elapsed="0.032191"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.336949" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:15.337098" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.336109" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.336057" elapsed="0.001276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.303446" elapsed="0.034196">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.303052" elapsed="0.034934"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.338908" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18337 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.403882" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.404115" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.338373" elapsed="0.065799"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.404294" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:15.404734" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.302485" elapsed="0.102394"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.405460" elapsed="0.000941"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.301334" elapsed="0.105258"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.298763" elapsed="0.108018"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.298007" elapsed="0.108912"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.296589" elapsed="0.110480"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.295953" elapsed="0.111216"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.408342" level="INFO">${next} = 18338</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.407522" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.409699" level="INFO">${current_port} = 18338</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.408766" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.291409" elapsed="0.118562"/>
</kw>
<msg time="2026-08-15T23:56:15.410058" level="INFO">Repeating keyword, round 509/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.412382" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.412225" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.412195" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.412938" level="INFO">${current_Date} = 2026-08-15 23:56:15.413</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.412681" elapsed="0.000296"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.413634" level="INFO">${ellapsed_seconds} = 2614.924</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.413187" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.414146" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.413770" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.413743" elapsed="0.000517"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.411876" elapsed="0.002447"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.415083" level="INFO">${number} = 509</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.414527" elapsed="0.000594"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.417126" level="INFO">${number} = 509</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.416621" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.419967" level="INFO">${device-port} = 18338</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.418842" elapsed="0.001237"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.423467" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.455441" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.455690" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.423349" elapsed="0.032401"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.456774" elapsed="0.000090"/>
</kw>
<msg time="2026-08-15T23:56:15.456950" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.455983" elapsed="0.001195">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.455926" elapsed="0.001372">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.423057" elapsed="0.034537">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.422416" elapsed="0.035325"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.458670" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18338 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.523717" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.524044" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.458180" elapsed="0.065933"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.524261" elapsed="0.000125"/>
</return>
<msg time="2026-08-15T23:56:15.524875" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.421832" elapsed="0.103211"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.525747" elapsed="0.001221"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.420688" elapsed="0.106500"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.418165" elapsed="0.109256"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.417387" elapsed="0.110149"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.415992" elapsed="0.111681"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.415340" elapsed="0.112435"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.529306" level="INFO">${next} = 18339</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.528266" elapsed="0.001108"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.531092" level="INFO">${current_port} = 18339</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.529913" elapsed="0.001297"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.410499" elapsed="0.120856"/>
</kw>
<msg time="2026-08-15T23:56:15.531462" level="INFO">Repeating keyword, round 510/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.534518" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.534265" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.534219" elapsed="0.000519"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.535629" level="INFO">${current_Date} = 2026-08-15 23:56:15.535</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.535233" elapsed="0.000463"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.536344" level="INFO">${ellapsed_seconds} = 2614.802</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.535989" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.536721" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.536444" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.536425" elapsed="0.000396"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.533667" elapsed="0.003204"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.537394" level="INFO">${number} = 510</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.537020" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.539103" level="INFO">${number} = 510</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.538668" elapsed="0.000463"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.541150" level="INFO">${device-port} = 18339</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.540333" elapsed="0.000897"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.543776" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.580329" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.580564" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.543670" elapsed="0.036953"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.581607" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:15.581744" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.580837" elapsed="0.001055">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.580749" elapsed="0.001242">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.543387" elapsed="0.038886">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.542988" elapsed="0.039507"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.583376" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18339 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.652382" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.652724" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.582884" elapsed="0.069899"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.652978" elapsed="0.000107"/>
</return>
<msg time="2026-08-15T23:56:15.653483" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.542527" elapsed="0.111066"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.654259" elapsed="0.000982"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.541669" elapsed="0.113765"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.539871" elapsed="0.115756"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.539294" elapsed="0.116438"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.538115" elapsed="0.117798"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.537579" elapsed="0.118441"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.657196" level="INFO">${next} = 18340</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.656369" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.658637" level="INFO">${current_port} = 18340</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.657623" elapsed="0.001114"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.532103" elapsed="0.126854"/>
</kw>
<msg time="2026-08-15T23:56:15.659063" level="INFO">Repeating keyword, round 511/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.661695" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.661443" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.661397" elapsed="0.000477"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.662618" level="INFO">${current_Date} = 2026-08-15 23:56:15.662</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.662207" elapsed="0.000473"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.663315" level="INFO">${ellapsed_seconds} = 2614.675</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.662976" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.663668" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.663412" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.663393" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.660901" elapsed="0.002891"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.664320" level="INFO">${number} = 511</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.663957" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.665765" level="INFO">${number} = 511</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.665426" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.667771" level="INFO">${device-port} = 18340</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.666992" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.670347" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.703485" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.703708" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.670241" elapsed="0.033525"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.704684" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:15.704850" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.703970" elapsed="0.001128">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.703923" elapsed="0.001287">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.669947" elapsed="0.035555">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.669529" elapsed="0.036116"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.706542" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18340 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.771844" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.772162" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.706056" elapsed="0.066165"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.772362" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:15.772869" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.669114" elapsed="0.103869"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.773597" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.668310" elapsed="0.106415"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.666510" elapsed="0.108476"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.665971" elapsed="0.109118"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.664972" elapsed="0.110244"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.664502" elapsed="0.110814"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.776541" level="INFO">${next} = 18341</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.775669" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.778014" level="INFO">${current_port} = 18341</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.777048" elapsed="0.001065"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.659547" elapsed="0.118699"/>
</kw>
<msg time="2026-08-15T23:56:15.778334" level="INFO">Repeating keyword, round 512/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.781034" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.780754" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.780711" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.781989" level="INFO">${current_Date} = 2026-08-15 23:56:15.782</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.781604" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.783035" level="INFO">${ellapsed_seconds} = 2614.555</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.782386" elapsed="0.000676"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.783386" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.783132" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.783114" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.780219" elapsed="0.003292"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.784047" level="INFO">${number} = 512</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.783659" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.785490" level="INFO">${number} = 512</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.785140" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.787575" level="INFO">${device-port} = 18341</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.786703" elapsed="0.000953"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.790449" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.823897" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.824215" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.790099" elapsed="0.034176"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.825392" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:15.825536" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.824478" elapsed="0.001169">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.824423" elapsed="0.001318">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.789779" elapsed="0.036298">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.789378" elapsed="0.036976"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.827513" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18341 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:15.892027" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.892266" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.826882" elapsed="0.065440"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:15.892449" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:15.892968" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.788956" elapsed="0.104135"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:15.893686" elapsed="0.000998"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.788132" elapsed="0.106823"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.786235" elapsed="0.108929"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.785680" elapsed="0.109619"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.784680" elapsed="0.110753"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.784230" elapsed="0.111309"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.896760" level="INFO">${next} = 18342</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.895959" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.898547" level="INFO">${current_port} = 18342</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:15.897320" elapsed="0.001337"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.778873" elapsed="0.119921"/>
</kw>
<msg time="2026-08-15T23:56:15.899004" level="INFO">Repeating keyword, round 513/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:15.901112" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:15.900952" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.900923" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.901637" level="INFO">${current_Date} = 2026-08-15 23:56:15.902</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:15.901407" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:15.902369" level="INFO">${ellapsed_seconds} = 2614.435</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:15.901915" elapsed="0.000491"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.902869" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:15.902503" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:15.902477" elapsed="0.000522"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:15.900590" elapsed="0.002475"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.903789" level="INFO">${number} = 513</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.903278" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.905843" level="INFO">${number} = 513</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.905344" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:15.908878" level="INFO">${device-port} = 18342</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:15.907714" elapsed="0.001278"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.912567" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:15.939577" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:15.939796" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.912304" elapsed="0.027580"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:15.940757" elapsed="0.000093"/>
</kw>
<msg time="2026-08-15T23:56:15.940932" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:15.940049" elapsed="0.001119">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:15.940004" elapsed="0.001266">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:15.912013" elapsed="0.029542">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:15.911361" elapsed="0.030336"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:15.942586" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18342 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.011961" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.012240" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:15.942101" elapsed="0.070197"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.012434" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:16.012948" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:15.910716" elapsed="0.102346"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.013662" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:15.909596" elapsed="0.105255"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:15.906988" elapsed="0.108071"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:15.906101" elapsed="0.109061"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.904691" elapsed="0.110597"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:15.904073" elapsed="0.111308"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.016610" level="INFO">${next} = 18343</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.015794" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.017570" level="INFO">${current_port} = 18343</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.017022" elapsed="0.000607"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:15.899621" elapsed="0.118090"/>
</kw>
<msg time="2026-08-15T23:56:16.017767" level="INFO">Repeating keyword, round 514/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.019443" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.019285" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.019258" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.020102" level="INFO">${current_Date} = 2026-08-15 23:56:16.020</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.019865" elapsed="0.000274"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.020790" level="INFO">${ellapsed_seconds} = 2614.317</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.020347" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.021291" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.020948" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.020922" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.018949" elapsed="0.002517"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.022208" level="INFO">${number} = 514</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.021671" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.024287" level="INFO">${number} = 514</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.023774" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.027080" level="INFO">${device-port} = 18343</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.025968" elapsed="0.001230"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.030071" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.064207" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.064464" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.029965" elapsed="0.034560"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.065512" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:16.065649" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.064710" elapsed="0.001046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.064659" elapsed="0.001221">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.029512" elapsed="0.036673">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.029120" elapsed="0.037321"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.067349" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18343 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.136171" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.136404" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.066845" elapsed="0.069616"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.136580" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:16.137065" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.028686" elapsed="0.108488"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.137738" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.027886" elapsed="0.111176"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.025317" elapsed="0.113935"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.024552" elapsed="0.114800"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.023123" elapsed="0.116354"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.022462" elapsed="0.117113"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.140774" level="INFO">${next} = 18344</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.139960" elapsed="0.000937"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.142178" level="INFO">${current_port} = 18344</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.141264" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.018108" elapsed="0.124298"/>
</kw>
<msg time="2026-08-15T23:56:16.142496" level="INFO">Repeating keyword, round 515/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.145109" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.144940" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.144910" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.145636" level="INFO">${current_Date} = 2026-08-15 23:56:16.146</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.145407" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.146356" level="INFO">${ellapsed_seconds} = 2614.191</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.145906" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.146849" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.146491" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.146465" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.144365" elapsed="0.002666"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.147745" level="INFO">${number} = 515</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.147237" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.149852" level="INFO">${number} = 515</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.149344" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.152662" level="INFO">${device-port} = 18344</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.151516" elapsed="0.001260"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.156464" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.187707" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.187975" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.156365" elapsed="0.031672"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.188946" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:16.189081" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.188204" elapsed="0.001075">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.188158" elapsed="0.001219">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.156084" elapsed="0.033572">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.155166" elapsed="0.034660"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.190687" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18344 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.259984" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.260216" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.190180" elapsed="0.070093"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.260395" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:16.260922" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.154541" elapsed="0.106496"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.261614" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.153428" elapsed="0.109342"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.150881" elapsed="0.112147"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.150120" elapsed="0.113026"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.148693" elapsed="0.114579"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.148053" elapsed="0.115314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.264537" level="INFO">${next} = 18345</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.263712" elapsed="0.000900"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.265980" level="INFO">${current_port} = 18345</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.265037" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.142999" elapsed="0.123211"/>
</kw>
<msg time="2026-08-15T23:56:16.266297" level="INFO">Repeating keyword, round 516/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.268998" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.268689" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.268645" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.269466" level="INFO">${current_Date} = 2026-08-15 23:56:16.269</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.269296" elapsed="0.000202"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.269990" level="INFO">${ellapsed_seconds} = 2614.068</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.269649" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.270338" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.270087" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.270070" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.268093" elapsed="0.002370"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.270992" level="INFO">${number} = 516</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.270610" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.272463" level="INFO">${number} = 516</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.272088" elapsed="0.000402"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.274451" level="INFO">${device-port} = 18345</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.273655" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.277227" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.311853" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.312071" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.277130" elapsed="0.034999"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.313024" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:16.313163" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.312290" elapsed="0.000978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.312246" elapsed="0.001113">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.276853" elapsed="0.036783">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.276252" elapsed="0.037623"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.314708" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18345 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.390082" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.390313" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.314227" elapsed="0.076147"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.390491" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:16.390971" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.275812" elapsed="0.115273"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.391718" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.275010" elapsed="0.117913"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.273206" elapsed="0.119917"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.272655" elapsed="0.120571"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.271621" elapsed="0.121731"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.271174" elapsed="0.122276"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.394598" level="INFO">${next} = 18346</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.393797" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.395987" level="INFO">${current_port} = 18346</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.395067" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.266757" elapsed="0.129463"/>
</kw>
<msg time="2026-08-15T23:56:16.396310" level="INFO">Repeating keyword, round 517/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.399072" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.398777" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.398734" elapsed="0.000498"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.399936" level="INFO">${current_Date} = 2026-08-15 23:56:16.400</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.399555" elapsed="0.000444"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.401086" level="INFO">${ellapsed_seconds} = 2613.937</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.400332" elapsed="0.000789"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.401452" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.401204" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.401184" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.398241" elapsed="0.003343"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.402119" level="INFO">${number} = 517</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.401731" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.403585" level="INFO">${number} = 517</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.403242" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.405614" level="INFO">${device-port} = 18346</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.404826" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.410952" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.436352" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.436686" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.410843" elapsed="0.025932"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.438190" elapsed="0.000083"/>
</kw>
<msg time="2026-08-15T23:56:16.438383" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.437077" elapsed="0.001576">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.437007" elapsed="0.001828">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.410529" elapsed="0.028731">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.407381" elapsed="0.032141"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.440873" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18346 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.518773" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.518995" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.440108" elapsed="0.078915"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.519107" elapsed="0.000059"/>
</return>
<msg time="2026-08-15T23:56:16.519384" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.406963" elapsed="0.112475"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.519750" elapsed="0.000494"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.406158" elapsed="0.114175"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.404317" elapsed="0.116109"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.403770" elapsed="0.116705"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.402766" elapsed="0.117770"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.402304" elapsed="0.118278"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.521173" level="INFO">${next} = 18347</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.520746" elapsed="0.000455"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.521784" level="INFO">${current_port} = 18347</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.521371" elapsed="0.000486"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.396792" elapsed="0.125146"/>
</kw>
<msg time="2026-08-15T23:56:16.522009" level="INFO">Repeating keyword, round 518/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.523708" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.523546" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.523517" elapsed="0.000313"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.524349" level="INFO">${current_Date} = 2026-08-15 23:56:16.524</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.524112" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.525106" level="INFO">${ellapsed_seconds} = 2613.813</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.524601" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.525597" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.525246" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.525220" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.523196" elapsed="0.002582"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.526589" level="INFO">${number} = 518</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.526044" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.528672" level="INFO">${number} = 518</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.528180" elapsed="0.000569"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.530902" level="INFO">${device-port} = 18347</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.530083" elapsed="0.000901"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.533727" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.564288" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.564505" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.533624" elapsed="0.030927"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.565268" elapsed="0.000032"/>
</kw>
<msg time="2026-08-15T23:56:16.565340" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.564702" elapsed="0.000692">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.564660" elapsed="0.000779">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.533155" elapsed="0.032431">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.532718" elapsed="0.033000"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.566172" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18347 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.636205" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.636468" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.565922" elapsed="0.070602"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.636657" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:16.637180" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.532269" elapsed="0.105020"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.638010" elapsed="0.000968"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.531434" elapsed="0.107736"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.529597" elapsed="0.109765"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.529038" elapsed="0.110428"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.527515" elapsed="0.112079"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.526870" elapsed="0.112823"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.640913" level="INFO">${next} = 18348</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.640087" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.642307" level="INFO">${current_port} = 18348</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.641345" elapsed="0.001058"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.522327" elapsed="0.120206"/>
</kw>
<msg time="2026-08-15T23:56:16.642622" level="INFO">Repeating keyword, round 519/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.645252" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.645001" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.644958" elapsed="0.000507"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.646141" level="INFO">${current_Date} = 2026-08-15 23:56:16.646</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.645835" elapsed="0.000332"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.646643" level="INFO">${ellapsed_seconds} = 2613.691</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.646318" elapsed="0.000351"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.647010" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.646740" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.646721" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.644434" elapsed="0.002703"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.647649" level="INFO">${number} = 519</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.647282" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.649110" level="INFO">${number} = 519</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.648750" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.651134" level="INFO">${device-port} = 18348</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.650328" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.653921" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.687764" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.687967" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.653599" elapsed="0.034429"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.689037" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:16.689175" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.688236" elapsed="0.001144">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.688183" elapsed="0.001296">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.653318" elapsed="0.036448">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.652899" elapsed="0.037042"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.690792" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18348 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.756269" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.756560" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.690300" elapsed="0.066321"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.756772" elapsed="0.000135"/>
</return>
<msg time="2026-08-15T23:56:16.757321" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.652467" elapsed="0.104974"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.758169" elapsed="0.001036"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.651656" elapsed="0.107763"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.649877" elapsed="0.109753"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.649312" elapsed="0.110434"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.648304" elapsed="0.111633"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.647850" elapsed="0.112196"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.761320" level="INFO">${next} = 18349</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.760428" elapsed="0.000959"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.762932" level="INFO">${current_port} = 18349</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.761784" elapsed="0.001212"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.643134" elapsed="0.119947"/>
</kw>
<msg time="2026-08-15T23:56:16.763139" level="INFO">Repeating keyword, round 520/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.764848" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.764656" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.764628" elapsed="0.000320"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.765470" level="INFO">${current_Date} = 2026-08-15 23:56:16.765</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.765229" elapsed="0.000278"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.766234" level="INFO">${ellapsed_seconds} = 2613.572</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.765716" elapsed="0.000559"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.766750" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.766382" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.766354" elapsed="0.000540"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.764304" elapsed="0.002658"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.767728" level="INFO">${number} = 520</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.767178" elapsed="0.000590"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.769972" level="INFO">${number} = 520</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.769397" elapsed="0.000618"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.772982" level="INFO">${device-port} = 18349</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.771766" elapsed="0.001335"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.775978" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.812849" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.813099" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.775867" elapsed="0.037292"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.814116" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:16.814256" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.813339" elapsed="0.001028">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.813290" elapsed="0.001171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.775516" elapsed="0.039232">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.775119" elapsed="0.039888"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.815888" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18349 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:16.884115" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.884350" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.815365" elapsed="0.069041"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:16.884527" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:16.885009" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.774659" elapsed="0.110460"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:16.885697" elapsed="0.000945"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.773830" elapsed="0.113056"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.771090" elapsed="0.115999"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.770260" elapsed="0.116935"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.768696" elapsed="0.118629"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.768025" elapsed="0.119401"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.888627" level="INFO">${next} = 18350</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.887773" elapsed="0.000916"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.890021" level="INFO">${current_port} = 18350</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:16.889110" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.763446" elapsed="0.126803"/>
</kw>
<msg time="2026-08-15T23:56:16.890339" level="INFO">Repeating keyword, round 521/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:16.892998" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:16.892721" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.892677" elapsed="0.000467"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.893857" level="INFO">${current_Date} = 2026-08-15 23:56:16.894</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:16.893472" elapsed="0.000450"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:16.894999" level="INFO">${ellapsed_seconds} = 2613.443</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:16.894259" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.895349" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:16.895097" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:16.895078" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:16.892186" elapsed="0.003288"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.896002" level="INFO">${number} = 521</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.895619" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.897450" level="INFO">${number} = 521</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.897107" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:16.899499" level="INFO">${device-port} = 18350</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:16.898684" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.902111" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:16.936056" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:16.936304" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.902002" elapsed="0.034362"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:16.937339" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:16.937477" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:16.936544" elapsed="0.001182">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:16.936493" elapsed="0.001375">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:16.901690" elapsed="0.036472">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:16.901293" elapsed="0.037017"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:16.939192" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18350 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.008046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.008269" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:16.938665" elapsed="0.069660"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.008443" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:17.008925" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:16.900875" elapsed="0.108166"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.009608" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:16.900070" elapsed="0.110661"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:16.898212" elapsed="0.112763"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:16.897637" elapsed="0.113451"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.896637" elapsed="0.114587"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:16.896184" elapsed="0.115143"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.012631" level="INFO">${next} = 18351</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.011755" elapsed="0.000942"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.014139" level="INFO">${current_port} = 18351</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.013137" elapsed="0.001105"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:16.890855" elapsed="0.123528"/>
</kw>
<msg time="2026-08-15T23:56:17.014478" level="INFO">Repeating keyword, round 522/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.016717" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.016560" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.016532" elapsed="0.000300"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.017330" level="INFO">${current_Date} = 2026-08-15 23:56:17.017</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.017101" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.018049" level="INFO">${ellapsed_seconds} = 2613.32</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.017580" elapsed="0.000507"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.018529" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.018189" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.018163" elapsed="0.000478"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.016223" elapsed="0.002483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.019473" level="INFO">${number} = 522</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.018936" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.021574" level="INFO">${number} = 522</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.021096" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.024381" level="INFO">${device-port} = 18351</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.023245" elapsed="0.001250"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.027987" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.060155" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.060381" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.027863" elapsed="0.032577"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.061368" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:17.061507" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.060608" elapsed="0.001007">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.060561" elapsed="0.001146">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.027434" elapsed="0.034586">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.026850" elapsed="0.035390"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.063207" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18351 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.132507" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.132740" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.062644" elapsed="0.070134"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.132913" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:17.133257" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.026245" elapsed="0.107081"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.133729" elapsed="0.000647"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.025127" elapsed="0.109371"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.022586" elapsed="0.112037"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.021855" elapsed="0.112836"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.020429" elapsed="0.114347"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.019756" elapsed="0.115109"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.135603" level="INFO">${next} = 18352</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.135093" elapsed="0.000547"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.136474" level="INFO">${current_port} = 18352</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.135903" elapsed="0.000637"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.014990" elapsed="0.121637"/>
</kw>
<msg time="2026-08-15T23:56:17.136686" level="INFO">Repeating keyword, round 523/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.138427" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.138270" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.138241" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.138989" level="INFO">${current_Date} = 2026-08-15 23:56:17.139</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.138726" elapsed="0.000302"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.139676" level="INFO">${ellapsed_seconds} = 2613.198</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.139237" elapsed="0.000475"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.140174" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.139831" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.139785" elapsed="0.000512"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.137928" elapsed="0.002435"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.141268" level="INFO">${number} = 523</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.140586" elapsed="0.000742"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.144697" level="INFO">${number} = 523</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.143743" elapsed="0.001040"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.147140" level="INFO">${device-port} = 18352</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.146328" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.149724" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.184735" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.185016" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.149606" elapsed="0.035473"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.186034" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:17.186174" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.185258" elapsed="0.001145">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.185208" elapsed="0.001298">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.149324" elapsed="0.037470">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.148927" elapsed="0.038058"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.187911" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18352 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.259931" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.260214" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.187373" elapsed="0.072899"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.260408" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:17.260925" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.148489" elapsed="0.112556"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.261671" elapsed="0.000987"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.147662" elapsed="0.115227"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.145865" elapsed="0.117223"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.145120" elapsed="0.118072"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.142711" elapsed="0.120610"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.141679" elapsed="0.121740"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.264605" level="INFO">${next} = 18353</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.263771" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.266008" level="INFO">${current_port} = 18353</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.265073" elapsed="0.001035"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.137061" elapsed="0.129181"/>
</kw>
<msg time="2026-08-15T23:56:17.266329" level="INFO">Repeating keyword, round 524/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.269051" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.268714" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.268669" elapsed="0.000534"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.269989" level="INFO">${current_Date} = 2026-08-15 23:56:17.270</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.269630" elapsed="0.000387"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.270495" level="INFO">${ellapsed_seconds} = 2613.067</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.270169" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.270862" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.270592" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.270573" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.268175" elapsed="0.002814"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.271502" level="INFO">${number} = 524</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.271136" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.272985" level="INFO">${number} = 524</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.272603" elapsed="0.000409"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.274974" level="INFO">${device-port} = 18353</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.274178" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.277715" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.312334" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.312648" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.277441" elapsed="0.035273"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.313866" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:56:17.314021" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.312977" elapsed="0.001163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.312911" elapsed="0.001331">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.277165" elapsed="0.037391">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.276727" elapsed="0.038113"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.315855" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18353 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.384522" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.384754" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.315250" elapsed="0.069604"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.384981" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:17.385430" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.276308" elapsed="0.109233"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.386180" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.275496" elapsed="0.111814"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.273702" elapsed="0.113797"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.273172" elapsed="0.114430"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.272154" elapsed="0.115573"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.271686" elapsed="0.116177"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.389033" level="INFO">${next} = 18354</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.388215" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.390386" level="INFO">${current_port} = 18354</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.389454" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.266782" elapsed="0.123829"/>
</kw>
<msg time="2026-08-15T23:56:17.390700" level="INFO">Repeating keyword, round 525/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.393348" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.393102" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.393058" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.394254" level="INFO">${current_Date} = 2026-08-15 23:56:17.394</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.393888" elapsed="0.000427"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.395236" level="INFO">${ellapsed_seconds} = 2612.943</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.394649" elapsed="0.000614"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.395585" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.395334" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.395315" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.392535" elapsed="0.003174"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.396243" level="INFO">${number} = 525</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.395870" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.397685" level="INFO">${number} = 525</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.397344" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.399703" level="INFO">${device-port} = 18354</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.398904" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.402437" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.432078" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.432298" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.402179" elapsed="0.030178"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.433288" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:17.433420" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.432523" elapsed="0.001101">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.432476" elapsed="0.001246">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.401901" elapsed="0.032133">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.401465" elapsed="0.032714"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.435044" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18354 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.503772" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.504029" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.434527" elapsed="0.069558"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.504203" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:17.504620" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.401054" elapsed="0.103678"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.505351" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.400245" elapsed="0.106198"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.398432" elapsed="0.108204"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.397906" elapsed="0.108832"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.396888" elapsed="0.110043"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.396425" elapsed="0.110607"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.508176" level="INFO">${next} = 18355</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.507381" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.509498" level="INFO">${current_port} = 18355</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.508597" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.391194" elapsed="0.118530"/>
</kw>
<msg time="2026-08-15T23:56:17.509871" level="INFO">Repeating keyword, round 526/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.512260" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.512146" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.512123" elapsed="0.000202"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.512681" level="INFO">${current_Date} = 2026-08-15 23:56:17.513</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.512518" elapsed="0.000190"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.513192" level="INFO">${ellapsed_seconds} = 2612.824</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.512874" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.513535" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.513290" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.513272" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.511631" elapsed="0.002029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.514189" level="INFO">${number} = 526</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.513822" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.515651" level="INFO">${number} = 526</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.515305" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.517645" level="INFO">${device-port} = 18355</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.516860" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.520375" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.555644" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.555900" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.520271" elapsed="0.035691"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.556863" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:17.557001" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.556128" elapsed="0.000979">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.556081" elapsed="0.001117">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.519835" elapsed="0.037638">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.519418" elapsed="0.038311"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.558618" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18355 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.627918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.628129" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.558136" elapsed="0.070048"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.628295" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:17.628702" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.519009" elapsed="0.109844"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.629407" elapsed="0.000866"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.518184" elapsed="0.112278"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.516390" elapsed="0.114259"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.515857" elapsed="0.114891"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.514859" elapsed="0.116060"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.514372" elapsed="0.116645"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.632181" level="INFO">${next} = 18356</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.631358" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.633496" level="INFO">${current_port} = 18356</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.632601" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.510314" elapsed="0.123405"/>
</kw>
<msg time="2026-08-15T23:56:17.633865" level="INFO">Repeating keyword, round 527/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.636467" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.636210" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.636167" elapsed="0.000452"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.637318" level="INFO">${current_Date} = 2026-08-15 23:56:17.637</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.636974" elapsed="0.000403"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.638423" level="INFO">${ellapsed_seconds} = 2612.7</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.637704" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.639315" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.638763" elapsed="0.000672"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.638597" elapsed="0.000890"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.635574" elapsed="0.004067"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.640438" level="INFO">${number} = 527</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.640048" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.641959" level="INFO">${number} = 527</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.641533" elapsed="0.000456"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.644277" level="INFO">${device-port} = 18356</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.643313" elapsed="0.001056"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.647344" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.680278" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.680519" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.647228" elapsed="0.033352"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.681538" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:17.681675" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.680760" elapsed="0.001143">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.680710" elapsed="0.001296">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.646937" elapsed="0.035351">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.646288" elapsed="0.036192"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.683216" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18356 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.748625" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.748957" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.682888" elapsed="0.066131"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.749158" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:56:17.749655" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.645863" elapsed="0.103906"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.750431" elapsed="0.000992"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.644930" elapsed="0.106705"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.642763" elapsed="0.109117"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.642172" elapsed="0.109819"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.641080" elapsed="0.111040"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.640619" elapsed="0.111599"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.753475" level="INFO">${next} = 18357</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.752578" elapsed="0.000961"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.754962" level="INFO">${current_port} = 18357</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.753986" elapsed="0.001080"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.634302" elapsed="0.120899"/>
</kw>
<msg time="2026-08-15T23:56:17.755288" level="INFO">Repeating keyword, round 528/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.757633" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.757472" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.757444" elapsed="0.000294"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.758286" level="INFO">${current_Date} = 2026-08-15 23:56:17.758</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.758039" elapsed="0.000285"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.759035" level="INFO">${ellapsed_seconds} = 2612.579</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.758537" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.759525" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.759175" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.759149" elapsed="0.000489"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.757125" elapsed="0.002578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.760471" level="INFO">${number} = 528</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.759947" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.762579" level="INFO">${number} = 528</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.762097" elapsed="0.000520"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.765483" level="INFO">${device-port} = 18357</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.764303" elapsed="0.001299"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.769467" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.800357" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.800585" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.769364" elapsed="0.031280"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.801572" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:17.801708" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.800849" elapsed="0.000995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.800764" elapsed="0.001177">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.769060" elapsed="0.033176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.768060" elapsed="0.034423"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.803359" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18357 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:17.872695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.872944" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.802868" elapsed="0.070132"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:17.873110" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:17.873508" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.767421" elapsed="0.106196"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:17.874403" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.766271" elapsed="0.109254"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.763630" elapsed="0.112085"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.762881" elapsed="0.112978"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.761435" elapsed="0.114565"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.760764" elapsed="0.115334"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.877252" level="INFO">${next} = 18358</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.876446" elapsed="0.000880"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.878642" level="INFO">${current_port} = 18358</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:17.877684" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.755782" elapsed="0.123155"/>
</kw>
<msg time="2026-08-15T23:56:17.879024" level="INFO">Repeating keyword, round 529/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:17.881684" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:17.881430" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.881388" elapsed="0.000510"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.882593" level="INFO">${current_Date} = 2026-08-15 23:56:17.882</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:17.882232" elapsed="0.000421"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:17.883369" level="INFO">${ellapsed_seconds} = 2612.455</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:17.883028" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.883715" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:17.883465" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:17.883447" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:17.880865" elapsed="0.002990"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.884365" level="INFO">${number} = 529</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.884001" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.885871" level="INFO">${number} = 529</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.885477" elapsed="0.000421"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:17.887851" level="INFO">${device-port} = 18358</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:17.887058" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.893072" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:17.928443" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:17.928687" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.892971" elapsed="0.035776"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:17.930001" elapsed="0.000070"/>
</kw>
<msg time="2026-08-15T23:56:17.930164" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:17.929014" elapsed="0.001380">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:17.928961" elapsed="0.001567">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:17.892661" elapsed="0.038234">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:17.889600" elapsed="0.041446"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:17.931957" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18358 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.000075" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.000289" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:17.931407" elapsed="0.068942"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.000474" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:18.001007" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:17.889173" elapsed="0.111951"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.001770" elapsed="0.001130"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:17.888369" elapsed="0.114771"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:17.886579" elapsed="0.116763"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:17.886055" elapsed="0.117424"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.885011" elapsed="0.118672"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:17.884543" elapsed="0.119288"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.005231" level="INFO">${next} = 18359</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.004265" elapsed="0.001028"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.006689" level="INFO">${current_port} = 18359</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.005685" elapsed="0.001107"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:17.879459" elapsed="0.127518"/>
</kw>
<msg time="2026-08-15T23:56:18.007085" level="INFO">Repeating keyword, round 530/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.010185" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.009914" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.009865" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.011130" level="INFO">${current_Date} = 2026-08-15 23:56:18.011</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.010720" elapsed="0.000469"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.012247" level="INFO">${ellapsed_seconds} = 2612.326</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.011515" elapsed="0.000791"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.013022" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.012460" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.012420" elapsed="0.000780"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.009066" elapsed="0.004232"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.014450" level="INFO">${number} = 530</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.013618" elapsed="0.000890"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.017658" level="INFO">${number} = 530</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.016914" elapsed="0.000803"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.021048" level="INFO">${device-port} = 18359</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.020257" elapsed="0.000873"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.023759" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.052331" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.052665" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.023660" elapsed="0.029071"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.053857" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:56:18.054025" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.053004" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.052936" elapsed="0.001307">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.023208" elapsed="0.031332">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.022818" elapsed="0.031961"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.055700" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18359 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.119856" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.120045" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.055190" elapsed="0.064890"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.120171" elapsed="0.000064"/>
</return>
<msg time="2026-08-15T23:56:18.120504" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.022375" elapsed="0.098199"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.121008" elapsed="0.000603"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.021567" elapsed="0.100165"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.019400" elapsed="0.102480"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.018128" elapsed="0.103819"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.015904" elapsed="0.106128"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.014890" elapsed="0.107205"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.122844" level="INFO">${next} = 18360</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.122317" elapsed="0.000567"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.123662" level="INFO">${current_port} = 18360</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.123114" elapsed="0.000608"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.007524" elapsed="0.116305"/>
</kw>
<msg time="2026-08-15T23:56:18.123890" level="INFO">Repeating keyword, round 531/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.125561" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.125404" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.125376" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.126130" level="INFO">${current_Date} = 2026-08-15 23:56:18.126</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.125900" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.126842" level="INFO">${ellapsed_seconds} = 2612.211</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.126376" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.127325" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.126981" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.126955" elapsed="0.000481"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.125068" elapsed="0.002432"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.128251" level="INFO">${number} = 531</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.127706" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.130315" level="INFO">${number} = 531</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.129837" elapsed="0.000515"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.133160" level="INFO">${device-port} = 18360</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.132006" elapsed="0.001265"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.137142" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.171771" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.171939" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.136632" elapsed="0.035344"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.172541" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:18.172625" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.172083" elapsed="0.000680">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.172053" elapsed="0.000792">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.136240" elapsed="0.036790">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.135626" elapsed="0.037493"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.173641" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18360 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.239273" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.239376" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.173338" elapsed="0.066063"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.239455" elapsed="0.000039"/>
</return>
<msg time="2026-08-15T23:56:18.239657" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.135045" elapsed="0.104664"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.239999" elapsed="0.000413"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.133914" elapsed="0.106586"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.131341" elapsed="0.109245"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.130574" elapsed="0.110058"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.129191" elapsed="0.111498"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.128523" elapsed="0.112210"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.241262" level="INFO">${next} = 18361</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.240913" elapsed="0.000377"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.241901" level="INFO">${current_port} = 18361</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.241455" elapsed="0.000490"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.124186" elapsed="0.117818"/>
</kw>
<msg time="2026-08-15T23:56:18.242044" level="INFO">Repeating keyword, round 532/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.243193" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.243081" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.243062" elapsed="0.000196"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.243613" level="INFO">${current_Date} = 2026-08-15 23:56:18.244</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.243442" elapsed="0.000197"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.244141" level="INFO">${ellapsed_seconds} = 2612.093</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.243787" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.244488" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.244239" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.244221" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.242841" elapsed="0.001773"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.245163" level="INFO">${number} = 532</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.244762" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.246782" level="INFO">${number} = 532</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.246439" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.248794" level="INFO">${device-port} = 18361</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.248014" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.251398" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.295508" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.295734" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.251299" elapsed="0.044495"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.296761" elapsed="0.000099"/>
</kw>
<msg time="2026-08-15T23:56:18.296945" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.296003" elapsed="0.001054">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.295956" elapsed="0.001193">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.251017" elapsed="0.046414">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.250599" elapsed="0.047050"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.298521" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18361 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.367917" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.368171" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.298035" elapsed="0.070195"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.368357" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:56:18.368892" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.250184" elapsed="0.118829"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.369605" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.249335" elapsed="0.121408"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.247537" elapsed="0.123462"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.246989" elapsed="0.124116"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.245990" elapsed="0.125244"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.245348" elapsed="0.125984"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.372513" level="INFO">${next} = 18362</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.371688" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.374030" level="INFO">${current_port} = 18362</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.373034" elapsed="0.001105"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.242244" elapsed="0.132038"/>
</kw>
<msg time="2026-08-15T23:56:18.374376" level="INFO">Repeating keyword, round 533/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.376706" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.376551" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.376522" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.377255" level="INFO">${current_Date} = 2026-08-15 23:56:18.377</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.377027" elapsed="0.000266"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.377970" level="INFO">${ellapsed_seconds} = 2611.96</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.377502" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.378450" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.378105" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.378079" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.376210" elapsed="0.002416"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.379430" level="INFO">${number} = 533</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.378911" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.381475" level="INFO">${number} = 533</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.380999" elapsed="0.000515"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.384288" level="INFO">${device-port} = 18362</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.383189" elapsed="0.001209"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.388030" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.424290" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.424535" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.387743" elapsed="0.036856"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.425636" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:18.425829" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.424779" elapsed="0.001287">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.424729" elapsed="0.001457">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.387355" elapsed="0.039136">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.386760" elapsed="0.039884"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.427763" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18362 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.495981" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.496214" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.427232" elapsed="0.069037"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.496380" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:18.496782" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.386148" elapsed="0.110795"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.497502" elapsed="0.000887"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.385038" elapsed="0.113539"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.382491" elapsed="0.116275"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.381735" elapsed="0.117179"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.380352" elapsed="0.118690"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.379687" elapsed="0.119451"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.500294" level="INFO">${next} = 18363</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.499487" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.501623" level="INFO">${current_port} = 18363</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.500718" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.375034" elapsed="0.126881"/>
</kw>
<msg time="2026-08-15T23:56:18.502005" level="INFO">Repeating keyword, round 534/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.504488" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.504245" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.504202" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.505421" level="INFO">${current_Date} = 2026-08-15 23:56:18.505</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.505069" elapsed="0.000413"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.506529" level="INFO">${ellapsed_seconds} = 2611.832</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.505845" elapsed="0.000744"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.507308" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.506747" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.506706" elapsed="0.000779"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.503673" elapsed="0.003913"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.508440" level="INFO">${number} = 534</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.508014" elapsed="0.000453"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.509892" level="INFO">${number} = 534</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.509530" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.511928" level="INFO">${device-port} = 18363</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.511092" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.514546" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.547836" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.548072" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.514444" elapsed="0.033689"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.549057" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:18.549194" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.548303" elapsed="0.000998">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.548256" elapsed="0.001137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.514163" elapsed="0.035509">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.513749" elapsed="0.036176"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.550775" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18363 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.616119" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.616332" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.550287" elapsed="0.066101"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.616499" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:18.616964" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.513336" elapsed="0.103752"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.617672" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.512450" elapsed="0.106334"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.510617" elapsed="0.108410"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.510081" elapsed="0.109049"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.509084" elapsed="0.110172"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.508622" elapsed="0.110730"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.620497" level="INFO">${next} = 18364</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.619697" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.621962" level="INFO">${current_port} = 18364</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.620964" elapsed="0.001096"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.502423" elapsed="0.119767"/>
</kw>
<msg time="2026-08-15T23:56:18.622277" level="INFO">Repeating keyword, round 535/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.624853" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.624567" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.624523" elapsed="0.000477"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.625719" level="INFO">${current_Date} = 2026-08-15 23:56:18.626</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.625368" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.626468" level="INFO">${ellapsed_seconds} = 2611.711</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.626138" elapsed="0.000356"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.626818" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.626564" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.626545" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.624026" elapsed="0.002917"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.627454" level="INFO">${number} = 535</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.627091" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.628894" level="INFO">${number} = 535</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.628541" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.630910" level="INFO">${device-port} = 18364</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.630102" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.633474" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.667676" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.667950" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.633371" elapsed="0.034643"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.668970" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:18.669108" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.668214" elapsed="0.001103">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.668164" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.633097" elapsed="0.036597">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.632669" elapsed="0.037201"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.670713" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18364 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.735879" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.736105" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.670224" elapsed="0.065939"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.736277" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:18.736686" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.632244" elapsed="0.104596"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.737416" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.631432" elapsed="0.107075"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.629628" elapsed="0.109088"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.629094" elapsed="0.109797"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.628097" elapsed="0.110925"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.627635" elapsed="0.111483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.740321" level="INFO">${next} = 18365</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.739466" elapsed="0.000921"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.741665" level="INFO">${current_port} = 18365</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.740752" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.622702" elapsed="0.119265"/>
</kw>
<msg time="2026-08-15T23:56:18.742056" level="INFO">Repeating keyword, round 536/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.744064" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.743907" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.743880" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.744619" level="INFO">${current_Date} = 2026-08-15 23:56:18.745</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.744403" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.745319" level="INFO">${ellapsed_seconds} = 2611.592</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.744889" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.745782" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.745455" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.745430" elapsed="0.000484"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.743548" elapsed="0.002431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.746729" level="INFO">${number} = 536</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.746186" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.748767" level="INFO">${number} = 536</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.748294" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.751708" level="INFO">${device-port} = 18365</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.750561" elapsed="0.001292"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.755681" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.788255" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.788477" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.755401" elapsed="0.033136"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.789467" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:18.789603" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.788709" elapsed="0.001017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.788662" elapsed="0.001203">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.755104" elapsed="0.035042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.754470" elapsed="0.035892"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.791221" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18365 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.859957" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.860171" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.790708" elapsed="0.069518"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.860355" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:18.860764" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.753837" elapsed="0.107095"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.861493" elapsed="0.000885"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.752646" elapsed="0.109917"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.749861" elapsed="0.112889"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.749053" elapsed="0.113844"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.747640" elapsed="0.115383"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.747015" elapsed="0.116105"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.864292" level="INFO">${next} = 18366</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.863463" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.865617" level="INFO">${current_port} = 18366</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.864715" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.742483" elapsed="0.123421"/>
</kw>
<msg time="2026-08-15T23:56:18.865995" level="INFO">Repeating keyword, round 537/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.868766" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.868523" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.868480" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.869397" level="INFO">${current_Date} = 2026-08-15 23:56:18.869</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.869161" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.870104" level="INFO">${ellapsed_seconds} = 2611.468</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.869641" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.870573" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.870239" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.870213" elapsed="0.000470"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.867908" elapsed="0.002837"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.871474" level="INFO">${number} = 537</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.870967" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.873499" level="INFO">${number} = 537</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.873030" elapsed="0.000507"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.876294" level="INFO">${device-port} = 18366</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.875162" elapsed="0.001246"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.880191" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:18.912104" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.912272" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.879710" elapsed="0.032601"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.912941" elapsed="0.000037"/>
</kw>
<msg time="2026-08-15T23:56:18.913030" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:18.912430" elapsed="0.000731">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:18.912398" elapsed="0.000827">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.879324" elapsed="0.034082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.878747" elapsed="0.034752"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.914062" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18366 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:18.979770" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:18.980039" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.913722" elapsed="0.066375"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:18.980216" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:18.980652" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.878170" elapsed="0.102593"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:18.981379" elapsed="0.000960"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.877052" elapsed="0.105477"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.874508" elapsed="0.108208"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.873761" elapsed="0.109102"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.872388" elapsed="0.110608"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.871726" elapsed="0.111367"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.984251" level="INFO">${next} = 18367</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.983442" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.985614" level="INFO">${current_port} = 18367</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:18.984698" elapsed="0.001012"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.866530" elapsed="0.119396"/>
</kw>
<msg time="2026-08-15T23:56:18.986022" level="INFO">Repeating keyword, round 538/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:18.988591" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:18.988339" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.988279" elapsed="0.000454"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.989528" level="INFO">${current_Date} = 2026-08-15 23:56:18.989</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:18.989169" elapsed="0.000419"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:18.990416" level="INFO">${ellapsed_seconds} = 2611.348</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:18.990025" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:18.990763" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:18.990515" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:18.990497" elapsed="0.000361"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:18.987758" elapsed="0.003146"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.991421" level="INFO">${number} = 538</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.991056" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.992873" level="INFO">${number} = 538</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.992512" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:18.994905" level="INFO">${device-port} = 18367</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:18.994100" elapsed="0.000886"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:18.997624" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.027832" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.028054" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:18.997512" elapsed="0.030600"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.029038" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:19.029177" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.028276" elapsed="0.001008">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.028231" elapsed="0.001144">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:18.997075" elapsed="0.032576">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:18.996660" elapsed="0.033231"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.030737" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18367 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.096285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.096503" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.030244" elapsed="0.066315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.096671" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:19.097235" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:18.996242" elapsed="0.101103"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.097948" elapsed="0.000880"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:18.995434" elapsed="0.103592"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:18.993586" elapsed="0.105633"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:18.993059" elapsed="0.106261"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.992069" elapsed="0.107373"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:18.991604" elapsed="0.107933"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.100471" level="INFO">${next} = 18368</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.099996" elapsed="0.000512"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.101300" level="INFO">${current_port} = 18368</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.100734" elapsed="0.000625"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:18.986464" elapsed="0.114975"/>
</kw>
<msg time="2026-08-15T23:56:19.101494" level="INFO">Repeating keyword, round 539/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.103105" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.102944" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.102916" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.103633" level="INFO">${current_Date} = 2026-08-15 23:56:19.104</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.103398" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.104347" level="INFO">${ellapsed_seconds} = 2611.233</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.103910" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.104840" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.104481" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.104455" elapsed="0.000498"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.102574" elapsed="0.002448"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.105759" level="INFO">${number} = 539</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.105232" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.107827" level="INFO">${number} = 539</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.107295" elapsed="0.000580"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.110597" level="INFO">${device-port} = 18368</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.109492" elapsed="0.001218"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.113740" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.144065" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.144285" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.113643" elapsed="0.030701"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.145262" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:19.145395" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.144508" elapsed="0.001072">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.144462" elapsed="0.001216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.113368" elapsed="0.032613">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.112781" elapsed="0.033344"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.147027" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18368 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.212128" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.212352" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.146470" elapsed="0.065937"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.212523" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:19.212984" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.112370" elapsed="0.100724"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.213714" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.111375" elapsed="0.103417"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.108866" elapsed="0.106168"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.108102" elapsed="0.107032"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.106647" elapsed="0.108609"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.106029" elapsed="0.109321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.216483" level="INFO">${next} = 18369</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.215691" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.217942" level="INFO">${current_port} = 18369</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.216950" elapsed="0.001092"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.101768" elapsed="0.116403"/>
</kw>
<msg time="2026-08-15T23:56:19.218256" level="INFO">Repeating keyword, round 540/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.220762" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.220521" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.220479" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.221863" level="INFO">${current_Date} = 2026-08-15 23:56:19.222</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.221471" elapsed="0.000465"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.222441" level="INFO">${ellapsed_seconds} = 2611.115</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.222128" elapsed="0.000339"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.222779" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.222537" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.222519" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.219992" elapsed="0.002931"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.223446" level="INFO">${number} = 540</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.223081" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.224905" level="INFO">${number} = 540</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.224541" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.227084" level="INFO">${device-port} = 18369</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.226131" elapsed="0.001035"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.229869" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.263104" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.263325" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.229738" elapsed="0.033645"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.264294" elapsed="0.000077"/>
</kw>
<msg time="2026-08-15T23:56:19.264465" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.263545" elapsed="0.001029">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.263500" elapsed="0.001167">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.229463" elapsed="0.035517">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.228873" elapsed="0.036318"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.266053" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18369 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.331487" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.331703" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.265542" elapsed="0.066216"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.331910" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:19.332321" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.228422" elapsed="0.104009"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.333122" elapsed="0.001008"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.227611" elapsed="0.106733"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.225643" elapsed="0.108925"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.225108" elapsed="0.109578"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.224094" elapsed="0.110792"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.223629" elapsed="0.111410"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.336241" level="INFO">${next} = 18370</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.335424" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.337660" level="INFO">${current_port} = 18370</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.336702" elapsed="0.001056"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.218688" elapsed="0.119268"/>
</kw>
<msg time="2026-08-15T23:56:19.338046" level="INFO">Repeating keyword, round 541/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.340420" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.340303" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.340283" elapsed="0.000207"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.340837" level="INFO">${current_Date} = 2026-08-15 23:56:19.341</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.340652" elapsed="0.000214"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.341327" level="INFO">${ellapsed_seconds} = 2610.996</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.341017" elapsed="0.000337"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.341669" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.341432" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.341407" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.340048" elapsed="0.001746"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.342328" level="INFO">${number} = 541</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.341964" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.343840" level="INFO">${number} = 541</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.343479" elapsed="0.000390"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.345847" level="INFO">${device-port} = 18370</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.345043" elapsed="0.000886"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.351085" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.383747" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.384022" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.350982" elapsed="0.033100"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.385055" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:19.385191" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.384264" elapsed="0.001134">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.384214" elapsed="0.001284">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.350642" elapsed="0.035137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.347650" elapsed="0.038335"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.386878" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18370 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.455840" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.456051" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.386356" elapsed="0.069749"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.456216" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:19.456678" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.347221" elapsed="0.109623"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.457414" elapsed="0.000921"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.346369" elapsed="0.112159"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.344561" elapsed="0.114156"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.344037" elapsed="0.114825"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.343021" elapsed="0.115972"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.342524" elapsed="0.116564"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.460239" level="INFO">${next} = 18371</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.459430" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.461602" level="INFO">${current_port} = 18371</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.460687" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.338553" elapsed="0.123339"/>
</kw>
<msg time="2026-08-15T23:56:19.461990" level="INFO">Repeating keyword, round 542/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.464565" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.464262" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.464219" elapsed="0.000491"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.465312" level="INFO">${current_Date} = 2026-08-15 23:56:19.465</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.465131" elapsed="0.000207"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.465828" level="INFO">${ellapsed_seconds} = 2610.872</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.465486" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.466177" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.465927" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.465909" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.463707" elapsed="0.002595"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.466821" level="INFO">${number} = 542</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.466446" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.468270" level="INFO">${number} = 542</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.467930" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.470286" level="INFO">${device-port} = 18371</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.469492" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.473012" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.503677" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.503942" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.472914" elapsed="0.031091"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.504896" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:19.505032" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.504170" elapsed="0.000967">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.504125" elapsed="0.001104">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.472448" elapsed="0.033048">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.472039" elapsed="0.033671"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.506565" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18371 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.572309" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.572519" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.506088" elapsed="0.066486"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.572711" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:19.573170" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.471612" elapsed="0.101667"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.573879" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.470833" elapsed="0.104174"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.469047" elapsed="0.106155"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.468483" elapsed="0.106822"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.467473" elapsed="0.107957"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.467010" elapsed="0.108518"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.576730" level="INFO">${next} = 18372</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.575947" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.578219" level="INFO">${current_port} = 18372</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.577218" elapsed="0.001107"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.462432" elapsed="0.116027"/>
</kw>
<msg time="2026-08-15T23:56:19.578546" level="INFO">Repeating keyword, round 543/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.581236" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.580990" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.580945" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.582140" level="INFO">${current_Date} = 2026-08-15 23:56:19.582</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.581706" elapsed="0.000500"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.583235" level="INFO">${ellapsed_seconds} = 2610.755</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.582569" elapsed="0.000706"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.583741" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.583382" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.583353" elapsed="0.000534"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.580370" elapsed="0.003586"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.584736" level="INFO">${number} = 543</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.584165" elapsed="0.000611"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.586882" level="INFO">${number} = 543</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.586378" elapsed="0.000543"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.589835" level="INFO">${device-port} = 18372</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.588576" elapsed="0.001401"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.593952" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.624358" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.624588" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.593464" elapsed="0.031199"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.625672" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:19.625844" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.624885" elapsed="0.001160">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.624795" elapsed="0.001352">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.593071" elapsed="0.033360">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.592404" elapsed="0.034171"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.627470" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18372 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.695950" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.696163" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.626956" elapsed="0.069266"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.696334" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:19.696771" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.591784" elapsed="0.105152"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.697501" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.590623" elapsed="0.107966"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.587920" elapsed="0.110863"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.587145" elapsed="0.111794"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.585684" elapsed="0.113384"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.585036" elapsed="0.114131"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.700330" level="INFO">${next} = 18373</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.699512" elapsed="0.000879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.701711" level="INFO">${current_port} = 18373</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.700792" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.579051" elapsed="0.122960"/>
</kw>
<msg time="2026-08-15T23:56:19.702099" level="INFO">Repeating keyword, round 544/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.704375" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.704265" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.704246" elapsed="0.000196"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.704821" level="INFO">${current_Date} = 2026-08-15 23:56:19.705</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.704635" elapsed="0.000216"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.705344" level="INFO">${ellapsed_seconds} = 2610.632</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.705003" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.705696" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.705445" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.705426" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.703873" elapsed="0.001977"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.706395" level="INFO">${number} = 544</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.706007" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.707962" level="INFO">${number} = 544</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.707551" elapsed="0.000439"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.710020" level="INFO">${device-port} = 18373</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.709201" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.712767" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.748354" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.748600" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.712662" elapsed="0.036020"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.749687" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:19.749874" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.748915" elapsed="0.001075">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.748865" elapsed="0.001239">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.712358" elapsed="0.038046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.711952" elapsed="0.038683"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.751593" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18373 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.816188" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.816421" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.751062" elapsed="0.065416"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.816599" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:56:19.817100" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.711380" elapsed="0.105833"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.817858" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.710562" elapsed="0.108453"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.708716" elapsed="0.110513"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.708155" elapsed="0.111181"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.707074" elapsed="0.112404"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.706582" elapsed="0.112999"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.820787" level="INFO">${next} = 18374</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.819983" elapsed="0.000923"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.822250" level="INFO">${current_port} = 18374</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.821280" elapsed="0.001072"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.702524" elapsed="0.119962"/>
</kw>
<msg time="2026-08-15T23:56:19.822576" level="INFO">Repeating keyword, round 545/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.825211" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.824959" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.824913" elapsed="0.000446"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.826149" level="INFO">${current_Date} = 2026-08-15 23:56:19.826</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.825741" elapsed="0.000444"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.826667" level="INFO">${ellapsed_seconds} = 2610.511</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.826341" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.827032" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.826768" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.826748" elapsed="0.000543"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.824355" elapsed="0.003000"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.827908" level="INFO">${number} = 545</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.827510" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.829530" level="INFO">${number} = 545</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.829147" elapsed="0.000426"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.831722" level="INFO">${device-port} = 18374</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.830874" elapsed="0.000950"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.834593" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.864258" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.864485" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.834482" elapsed="0.030064"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.865602" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:19.865741" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.864741" elapsed="0.001252">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.864687" elapsed="0.001415">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.834188" elapsed="0.032238">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.833713" elapsed="0.032885"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.867544" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18374 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:19.936331" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.936548" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.867018" elapsed="0.069601"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:19.936746" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:56:19.937214" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.833237" elapsed="0.104092"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:19.937964" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.832283" elapsed="0.106794"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.830330" elapsed="0.108938"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.829745" elapsed="0.109626"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.828574" elapsed="0.110926"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.828110" elapsed="0.111488"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.940962" level="INFO">${next} = 18375</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.940045" elapsed="0.000984"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.942326" level="INFO">${current_port} = 18375</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:19.941402" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.823073" elapsed="0.119486"/>
</kw>
<msg time="2026-08-15T23:56:19.942644" level="INFO">Repeating keyword, round 546/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:19.944644" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:19.944533" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.944514" elapsed="0.000204"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.945083" level="INFO">${current_Date} = 2026-08-15 23:56:19.945</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:19.944917" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:19.945582" level="INFO">${ellapsed_seconds} = 2610.392</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:19.945263" elapsed="0.000346"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.945941" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:19.945682" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:19.945663" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:19.944291" elapsed="0.001780"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.946594" level="INFO">${number} = 546</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.946219" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.948089" level="INFO">${number} = 546</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.947713" elapsed="0.000404"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:19.950115" level="INFO">${device-port} = 18375</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:19.949302" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.952726" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:19.991911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:19.992136" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.952597" elapsed="0.039599"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:19.993105" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:19.993240" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:19.992362" elapsed="0.000985">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:19.992315" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:19.952320" elapsed="0.041386">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:19.951917" elapsed="0.042040"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:19.994870" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18375 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.070185" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.070474" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:19.994313" elapsed="0.076219"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.070675" elapsed="0.000103"/>
</return>
<msg time="2026-08-15T23:56:20.071206" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:19.951465" elapsed="0.119851"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.071974" elapsed="0.000969"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:19.950638" elapsed="0.122500"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:19.948844" elapsed="0.124506"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:19.948285" elapsed="0.125183"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.947245" elapsed="0.126356"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:19.946779" elapsed="0.126927"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.074946" level="INFO">${next} = 18376</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.074112" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.076456" level="INFO">${current_port} = 18376</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.075391" elapsed="0.001161"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:19.943131" elapsed="0.133552"/>
</kw>
<msg time="2026-08-15T23:56:20.076771" level="INFO">Repeating keyword, round 547/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.079487" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.079202" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.079157" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.080349" level="INFO">${current_Date} = 2026-08-15 23:56:20.080</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.079991" elapsed="0.000420"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.081531" level="INFO">${ellapsed_seconds} = 2610.257</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.080745" elapsed="0.000847"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.082166" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.081750" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.081708" elapsed="0.000538"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.078624" elapsed="0.003667"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.082833" level="INFO">${number} = 547</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.082438" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.084286" level="INFO">${number} = 547</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.083940" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.086305" level="INFO">${device-port} = 18376</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.085497" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.088853" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.115698" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.115956" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.088723" elapsed="0.027293"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.116963" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:20.117102" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.116181" elapsed="0.001133">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.116136" elapsed="0.001276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.088448" elapsed="0.029246">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.088061" elapsed="0.029806"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.118708" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18376 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.184065" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.184277" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.118223" elapsed="0.066110"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.184444" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:20.184896" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.087625" elapsed="0.097386"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.185563" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.086842" elapsed="0.099797"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.085025" elapsed="0.101846"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.084472" elapsed="0.102503"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.083472" elapsed="0.103628"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.083020" elapsed="0.104176"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.188397" level="INFO">${next} = 18377</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.187592" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.189761" level="INFO">${current_port} = 18377</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.188864" elapsed="0.001063"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.077307" elapsed="0.112757"/>
</kw>
<msg time="2026-08-15T23:56:20.190150" level="INFO">Repeating keyword, round 548/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.192689" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.192446" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.192404" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.193616" level="INFO">${current_Date} = 2026-08-15 23:56:20.193</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.193269" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.194731" level="INFO">${ellapsed_seconds} = 2610.144</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.194048" elapsed="0.000742"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.195570" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.194982" elapsed="0.000718"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.194940" elapsed="0.000814"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.191905" elapsed="0.003985"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.196478" level="INFO">${number} = 548</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.196111" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.197931" level="INFO">${number} = 548</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.197573" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.199932" level="INFO">${device-port} = 18377</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.199107" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.202601" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.235605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.235893" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.202353" elapsed="0.033604"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.236928" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:20.237074" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.236139" elapsed="0.001044">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.236089" elapsed="0.001186">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.202074" elapsed="0.035481">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.201664" elapsed="0.036113"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.238710" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18377 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.304231" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.304457" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.238170" elapsed="0.066345"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.304632" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:20.305092" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.201255" elapsed="0.103949"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.305839" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.200453" elapsed="0.106495"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.198635" elapsed="0.108530"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.198118" elapsed="0.109159"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.197124" elapsed="0.110277"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.196660" elapsed="0.110839"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.308656" level="INFO">${next} = 18378</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.307891" elapsed="0.000826"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.310069" level="INFO">${current_port} = 18378</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.309136" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.190571" elapsed="0.119724"/>
</kw>
<msg time="2026-08-15T23:56:20.310383" level="INFO">Repeating keyword, round 549/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.312948" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.312673" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.312629" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.313866" level="INFO">${current_Date} = 2026-08-15 23:56:20.314</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.313477" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.314529" level="INFO">${ellapsed_seconds} = 2610.023</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.314208" elapsed="0.000347"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.314883" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.314625" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.314606" elapsed="0.000366"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.312146" elapsed="0.002870"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.315530" level="INFO">${number} = 549</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.315161" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.316973" level="INFO">${number} = 549</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.316621" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.318972" level="INFO">${device-port} = 18378</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.318180" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.321670" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.360009" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.360229" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.321417" elapsed="0.038871"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.361256" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:20.361392" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.360476" elapsed="0.001105">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.360429" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.321130" elapsed="0.040894">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.320711" elapsed="0.041466"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.363050" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18378 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.427901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.428109" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.362522" elapsed="0.065641"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.428271" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:20.428671" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.320296" elapsed="0.108486"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.429402" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.319496" elapsed="0.110969"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.317700" elapsed="0.112952"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.317175" elapsed="0.113575"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.316179" elapsed="0.114739"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.315710" elapsed="0.115303"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.432165" level="INFO">${next} = 18379</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.431382" elapsed="0.000843"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.433584" level="INFO">${current_port} = 18379</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.432584" elapsed="0.001099"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.310868" elapsed="0.123009"/>
</kw>
<msg time="2026-08-15T23:56:20.433969" level="INFO">Repeating keyword, round 550/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.436551" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.436305" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.436263" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.437543" level="INFO">${current_Date} = 2026-08-15 23:56:20.437</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.437197" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.438648" level="INFO">${ellapsed_seconds} = 2609.9</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.437967" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.439487" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.438896" elapsed="0.000719"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.438853" elapsed="0.000815"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.435743" elapsed="0.004025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.440520" level="INFO">${number} = 550</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.440139" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.442035" level="INFO">${number} = 550</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.441625" elapsed="0.000439"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.444065" level="INFO">${device-port} = 18379</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.443245" elapsed="0.000901"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.446742" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.480117" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.480333" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.446639" elapsed="0.033752"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.481293" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:20.481426" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.480552" elapsed="0.000979">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.480508" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.446223" elapsed="0.035714">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.445829" elapsed="0.036315"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.483056" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18379 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.547711" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.547974" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.482529" elapsed="0.065501"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.548142" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:20.548549" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.445400" elapsed="0.103260"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.549305" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.444585" elapsed="0.105815"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.442748" elapsed="0.107842"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.442225" elapsed="0.108465"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.441166" elapsed="0.109691"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.440701" elapsed="0.110260"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.552105" level="INFO">${next} = 18380</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.551306" elapsed="0.000859"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.553461" level="INFO">${current_port} = 18380</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.552531" elapsed="0.001031"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.434414" elapsed="0.119279"/>
</kw>
<msg time="2026-08-15T23:56:20.553783" level="INFO">Repeating keyword, round 551/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.556462" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.556218" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.556174" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.557369" level="INFO">${current_Date} = 2026-08-15 23:56:20.557</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.557005" elapsed="0.000423"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.558322" level="INFO">${ellapsed_seconds} = 2609.78</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.557756" elapsed="0.000602"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.558783" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.558456" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.558430" elapsed="0.000486"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.555598" elapsed="0.003381"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.559689" level="INFO">${number} = 551</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.559180" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.561751" level="INFO">${number} = 551</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.561277" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.564616" level="INFO">${device-port} = 18380</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.563468" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.568498" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.599838" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.600061" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.568363" elapsed="0.031756"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.601047" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:20.601181" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.600306" elapsed="0.001054">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.600260" elapsed="0.001198">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.567974" elapsed="0.033753">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.567134" elapsed="0.034766"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.602722" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18380 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.668073" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.668284" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.602246" elapsed="0.066092"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.668445" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:20.668887" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.566528" elapsed="0.102474"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.669553" elapsed="0.000872"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.565421" elapsed="0.105188"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.562760" elapsed="0.108035"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.562038" elapsed="0.108904"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.560605" elapsed="0.110489"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.559972" elapsed="0.111222"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.672318" level="INFO">${next} = 18381</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.671538" elapsed="0.000840"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.673616" level="INFO">${current_port} = 18381</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.672731" elapsed="0.000979"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.554290" elapsed="0.119614"/>
</kw>
<msg time="2026-08-15T23:56:20.673994" level="INFO">Repeating keyword, round 552/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.676514" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.676273" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.676230" elapsed="0.000425"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.677425" level="INFO">${current_Date} = 2026-08-15 23:56:20.677</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.677081" elapsed="0.000403"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.678520" level="INFO">${ellapsed_seconds} = 2609.66</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.677848" elapsed="0.000731"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.679337" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.678735" elapsed="0.000728"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.678695" elapsed="0.000822"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.675706" elapsed="0.003911"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.680457" level="INFO">${number} = 552</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.679980" elapsed="0.000503"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.681896" level="INFO">${number} = 552</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.681545" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.683877" level="INFO">${device-port} = 18381</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.683077" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.686563" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.723565" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.723832" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.686467" elapsed="0.037431"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.724785" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:56:20.724954" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.724073" elapsed="0.000989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.724025" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.686194" elapsed="0.039228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.685623" elapsed="0.040004"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.726555" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18381 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.791941" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.792165" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.726012" elapsed="0.066210"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.792337" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:20.792744" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.685200" elapsed="0.107694"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.793514" elapsed="0.000904"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.684393" elapsed="0.110215"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.682593" elapsed="0.112245"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.682081" elapsed="0.112868"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.681096" elapsed="0.113979"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.680639" elapsed="0.114535"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.796344" level="INFO">${next} = 18382</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.795537" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.797680" level="INFO">${current_port} = 18382</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.796765" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.674410" elapsed="0.123562"/>
</kw>
<msg time="2026-08-15T23:56:20.798058" level="INFO">Repeating keyword, round 553/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.800578" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.800310" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.800268" elapsed="0.000454"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.801467" level="INFO">${current_Date} = 2026-08-15 23:56:20.801</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.801118" elapsed="0.000409"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.802360" level="INFO">${ellapsed_seconds} = 2609.536</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.801888" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.802688" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.802455" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.802437" elapsed="0.000331"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.799728" elapsed="0.003100"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.803353" level="INFO">${number} = 553</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.802980" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.804789" level="INFO">${number} = 553</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.804450" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.806816" level="INFO">${device-port} = 18382</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.806019" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.811728" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.843873" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.844095" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.811628" elapsed="0.032526"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.845097" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:20.845232" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.844323" elapsed="0.001107">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.844276" elapsed="0.001253">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.811335" elapsed="0.034495">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.808572" elapsed="0.037406"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.846830" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18382 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:20.921761" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.922007" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.846323" elapsed="0.075738"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:20.922171" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:20.922574" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.808150" elapsed="0.114532"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:20.923306" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.807331" elapsed="0.117048"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.805543" elapsed="0.119022"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.805015" elapsed="0.119647"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.803996" elapsed="0.120791"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.803533" elapsed="0.121401"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.926074" level="INFO">${next} = 18383</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.925277" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.927438" level="INFO">${current_port} = 18383</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:20.926490" elapsed="0.001045"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.798476" elapsed="0.129187"/>
</kw>
<msg time="2026-08-15T23:56:20.927746" level="INFO">Repeating keyword, round 554/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:20.930309" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:20.930068" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.930026" elapsed="0.000425"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.931273" level="INFO">${current_Date} = 2026-08-15 23:56:20.931</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:20.930874" elapsed="0.000459"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:20.932283" level="INFO">${ellapsed_seconds} = 2609.406</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:20.931664" elapsed="0.000656"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.932748" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:20.932417" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:20.932392" elapsed="0.000496"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:20.929513" elapsed="0.003438"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.933664" level="INFO">${number} = 554</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.933160" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.935688" level="INFO">${number} = 554</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.935219" elapsed="0.000506"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:20.938498" level="INFO">${device-port} = 18383</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:20.937358" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.942535" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:20.967521" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:20.967742" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.942398" elapsed="0.025437"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:20.968704" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:20.968868" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:20.968006" elapsed="0.000970">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:20.967960" elapsed="0.001111">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:20.941618" elapsed="0.027720">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:20.941083" elapsed="0.028464"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:20.970410" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18383 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.036000" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.036206" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:20.969928" elapsed="0.066332"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.036369" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:21.036772" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:20.940475" elapsed="0.096452"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.037502" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:20.939272" elapsed="0.099299"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:20.936702" elapsed="0.102054"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:20.935970" elapsed="0.102933"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.934568" elapsed="0.104460"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:20.933944" elapsed="0.105180"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.040268" level="INFO">${next} = 18384</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.039467" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.041615" level="INFO">${current_port} = 18384</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.040700" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:20.928265" elapsed="0.113672"/>
</kw>
<msg time="2026-08-15T23:56:21.042029" level="INFO">Repeating keyword, round 555/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.044478" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.044237" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.044195" elapsed="0.000424"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.045364" level="INFO">${current_Date} = 2026-08-15 23:56:21.045</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.044973" elapsed="0.000459"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.046311" level="INFO">${ellapsed_seconds} = 2609.292</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.045764" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.046640" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.046408" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.046389" elapsed="0.000329"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.043681" elapsed="0.003082"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.047443" level="INFO">${number} = 555</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.046923" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.048874" level="INFO">${number} = 555</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.048522" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.050891" level="INFO">${device-port} = 18384</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.050094" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.053593" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.087863" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.088085" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.053330" elapsed="0.034813"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.089089" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:56:21.089233" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.088307" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.088262" elapsed="0.001248">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.053035" elapsed="0.036742">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.052623" elapsed="0.037330"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.090774" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18384 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.155828" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.156071" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.090297" elapsed="0.065832"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.156244" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:21.156658" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.052213" elapsed="0.104557"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.157391" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.051412" elapsed="0.107077"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.049612" elapsed="0.109068"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.049058" elapsed="0.109724"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.048081" elapsed="0.110878"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.047624" elapsed="0.111431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.160247" level="INFO">${next} = 18385</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.159403" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.161574" level="INFO">${current_port} = 18385</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.160669" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.042447" elapsed="0.119409"/>
</kw>
<msg time="2026-08-15T23:56:21.161950" level="INFO">Repeating keyword, round 556/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.164322" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.164208" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.164187" elapsed="0.000201"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.164742" level="INFO">${current_Date} = 2026-08-15 23:56:21.165</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.164577" elapsed="0.000191"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.165256" level="INFO">${ellapsed_seconds} = 2609.172</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.164934" elapsed="0.000349"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.165595" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.165352" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.165334" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.163715" elapsed="0.002004"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.166251" level="INFO">${number} = 556</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.165882" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.167689" level="INFO">${number} = 556</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.167336" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.169726" level="INFO">${device-port} = 18385</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.168950" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.172375" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.208073" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.208303" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.172273" elapsed="0.036090"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.209295" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:21.209433" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.208532" elapsed="0.001009">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.208484" elapsed="0.001149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.171987" elapsed="0.037965">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.171519" elapsed="0.038659"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.211092" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18385 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.275741" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.275984" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.210533" elapsed="0.065507"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.276152" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:21.276555" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.171072" elapsed="0.105594"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.277299" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.170262" elapsed="0.108206"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.168436" elapsed="0.110323"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.167901" elapsed="0.111027"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.166893" elapsed="0.112176"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.166432" elapsed="0.112737"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.280425" level="INFO">${next} = 18386</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.279594" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.281771" level="INFO">${current_port} = 18386</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.280892" elapsed="0.001052"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.162392" elapsed="0.119689"/>
</kw>
<msg time="2026-08-15T23:56:21.282168" level="INFO">Repeating keyword, round 557/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.284663" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.284402" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.284358" elapsed="0.000482"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.285522" level="INFO">${current_Date} = 2026-08-15 23:56:21.285</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.285174" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.286429" level="INFO">${ellapsed_seconds} = 2609.052</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.286029" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.286767" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.286526" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.286507" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.283869" elapsed="0.003038"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.287418" level="INFO">${number} = 557</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.287055" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.288907" level="INFO">${number} = 557</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.288514" elapsed="0.000420"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.290911" level="INFO">${device-port} = 18386</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.290112" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.293457" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.327571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.327829" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.293343" elapsed="0.034551"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.328769" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:56:21.328937" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.328061" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.328015" elapsed="0.001241">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.293059" elapsed="0.036469">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.292642" elapsed="0.037029"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.330544" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18386 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.395660" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.395912" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.330056" elapsed="0.065934"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.396117" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:21.396527" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.292228" elapsed="0.104436"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.397291" elapsed="0.000933"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.291428" elapsed="0.106990"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.289630" elapsed="0.108990"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.289094" elapsed="0.109627"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.288063" elapsed="0.110832"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.287600" elapsed="0.111394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.400176" level="INFO">${next} = 18387</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.399342" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.401529" level="INFO">${current_port} = 18387</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.400599" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.282587" elapsed="0.119172"/>
</kw>
<msg time="2026-08-15T23:56:21.401921" level="INFO">Repeating keyword, round 558/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.404515" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.404269" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.404225" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.405331" level="INFO">${current_Date} = 2026-08-15 23:56:21.405</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.405100" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.406027" level="INFO">${ellapsed_seconds} = 2608.932</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.405578" elapsed="0.000486"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.406492" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.406163" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.406138" elapsed="0.000473"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.403648" elapsed="0.003026"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.407426" level="INFO">${number} = 558</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.406909" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.409475" level="INFO">${number} = 558</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.409003" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.412340" level="INFO">${device-port} = 18387</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.411181" elapsed="0.001276"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.416069" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.451248" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.451475" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.415905" elapsed="0.035630"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.452449" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:21.452583" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.451699" elapsed="0.000989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.451653" elapsed="0.001128">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.415423" elapsed="0.037666">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.414878" elapsed="0.038423"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.454174" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18387 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.519840" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.520094" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.453656" elapsed="0.066499"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.520265" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:21.520682" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.414266" elapsed="0.106565"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.521393" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.413112" elapsed="0.109407"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.410517" elapsed="0.112187"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.409732" elapsed="0.113117"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.408351" elapsed="0.114631"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.407679" elapsed="0.115402"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.524240" level="INFO">${next} = 18388</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.523425" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.525580" level="INFO">${current_port} = 18388</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.524676" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.402358" elapsed="0.123505"/>
</kw>
<msg time="2026-08-15T23:56:21.525958" level="INFO">Repeating keyword, round 559/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.527988" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.527834" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.527787" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.528492" level="INFO">${current_Date} = 2026-08-15 23:56:21.528</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.528280" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.529201" level="INFO">${ellapsed_seconds} = 2608.809</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.528744" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.529687" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.529358" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.529329" elapsed="0.000495"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.527482" elapsed="0.002411"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.530683" level="INFO">${number} = 559</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.530146" elapsed="0.000581"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.532956" level="INFO">${number} = 559</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.532393" elapsed="0.000601"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.535740" level="INFO">${device-port} = 18388</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.534626" elapsed="0.001262"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.539178" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.572183" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.572410" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.539074" elapsed="0.033397"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.573560" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:21.573714" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.572676" elapsed="0.001287">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.572619" elapsed="0.001455">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.538706" elapsed="0.035669">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.538311" elapsed="0.036215"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.575437" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18388 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.644003" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.644349" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.574938" elapsed="0.069487"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.644547" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:21.645009" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.537681" elapsed="0.107439"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.645685" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.536523" elapsed="0.110244"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.533995" elapsed="0.113001"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.533216" elapsed="0.113881"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.531691" elapsed="0.115529"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.530975" elapsed="0.116355"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.648495" level="INFO">${next} = 18389</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.647678" elapsed="0.000879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.649885" level="INFO">${current_port} = 18389</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.648985" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.526430" elapsed="0.123687"/>
</kw>
<msg time="2026-08-15T23:56:21.650202" level="INFO">Repeating keyword, round 560/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.652781" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.652538" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.652495" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.653633" level="INFO">${current_Date} = 2026-08-15 23:56:21.654</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.653413" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.654341" level="INFO">${ellapsed_seconds} = 2608.683</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.653915" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.654829" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.654477" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.654451" elapsed="0.000491"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.651954" elapsed="0.003053"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.655722" level="INFO">${number} = 560</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.655213" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.657762" level="INFO">${number} = 560</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.657290" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.660558" level="INFO">${device-port} = 18389</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.659438" elapsed="0.001229"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.665745" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.696373" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.696595" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.665421" elapsed="0.031233"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.697589" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:21.697732" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.696865" elapsed="0.001010">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.696782" elapsed="0.001190">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.665054" elapsed="0.033188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.664041" elapsed="0.034494"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.699405" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18389 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.767950" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.768178" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.698920" elapsed="0.069325"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.768360" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:21.768790" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.662411" elapsed="0.106545"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.769545" elapsed="0.000918"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.661301" elapsed="0.109408"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.658777" elapsed="0.112177"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.658053" elapsed="0.113004"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.656643" elapsed="0.114553"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.655998" elapsed="0.115297"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.772478" level="INFO">${next} = 18390</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.771668" elapsed="0.000881"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.773968" level="INFO">${current_port} = 18390</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.772991" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.650626" elapsed="0.123578"/>
</kw>
<msg time="2026-08-15T23:56:21.774290" level="INFO">Repeating keyword, round 561/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.776996" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.776711" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.776668" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.777898" level="INFO">${current_Date} = 2026-08-15 23:56:21.778</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.777470" elapsed="0.000496"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.779162" level="INFO">${ellapsed_seconds} = 2608.559</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.778317" elapsed="0.000885"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.779542" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.779286" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.779265" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.776138" elapsed="0.003533"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.780204" level="INFO">${number} = 561</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.779836" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.781671" level="INFO">${number} = 561</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.781312" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.783726" level="INFO">${device-port} = 18390</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.782943" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.786611" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.815641" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.815907" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.786329" elapsed="0.029643"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.816918" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:21.817058" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.816144" elapsed="0.001104">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.816095" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.786011" elapsed="0.031674">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.785567" elapsed="0.032391"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.818924" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18390 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:21.884237" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.884470" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.818376" elapsed="0.066153"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:21.884646" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:21.885134" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.785124" elapsed="0.100125"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:21.885859" elapsed="0.000886"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.784265" elapsed="0.102712"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.782439" elapsed="0.104724"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.781874" elapsed="0.105390"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.780865" elapsed="0.106522"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.780389" elapsed="0.107090"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.888640" level="INFO">${next} = 18391</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.887870" elapsed="0.000830"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.890045" level="INFO">${current_port} = 18391</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:21.889140" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.774777" elapsed="0.115515"/>
</kw>
<msg time="2026-08-15T23:56:21.890376" level="INFO">Repeating keyword, round 562/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:21.893015" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:21.892669" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.892627" elapsed="0.000547"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.894010" level="INFO">${current_Date} = 2026-08-15 23:56:21.894</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:21.893596" elapsed="0.000479"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:21.894757" level="INFO">${ellapsed_seconds} = 2608.443</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:21.894315" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.895271" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:21.894924" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:21.894897" elapsed="0.000488"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:21.892118" elapsed="0.003330"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.896203" level="INFO">${number} = 562</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.895658" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.898281" level="INFO">${number} = 562</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.897764" elapsed="0.000555"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:21.901067" level="INFO">${device-port} = 18391</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:21.899946" elapsed="0.001237"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.905058" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:21.935458" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:21.935677" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.904772" elapsed="0.030963"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:21.936667" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:21.936830" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:21.935940" elapsed="0.001000">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:21.935892" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:21.904156" elapsed="0.033146">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:21.903531" elapsed="0.033975"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:21.938366" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18391 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.004287" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.004534" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:21.937885" elapsed="0.066709"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.004711" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:22.005180" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:21.902942" elapsed="0.102348"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.005924" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:21.901830" elapsed="0.105229"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:21.899293" elapsed="0.107958"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:21.898538" elapsed="0.108849"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.897130" elapsed="0.110411"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:21.896457" elapsed="0.111193"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.008923" level="INFO">${next} = 18392</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.008063" elapsed="0.000925"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.010301" level="INFO">${current_port} = 18392</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.009355" elapsed="0.001047"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:21.890844" elapsed="0.119689"/>
</kw>
<msg time="2026-08-15T23:56:22.010643" level="INFO">Repeating keyword, round 563/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.012954" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.012773" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.012745" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.013468" level="INFO">${current_Date} = 2026-08-15 23:56:22.013</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.013250" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.014190" level="INFO">${ellapsed_seconds} = 2608.324</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.013729" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.014671" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.014328" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.014300" elapsed="0.000521"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.012400" elapsed="0.002491"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.015661" level="INFO">${number} = 563</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.015107" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.017792" level="INFO">${number} = 563</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.017263" elapsed="0.000592"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.020742" level="INFO">${device-port} = 18392</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.019552" elapsed="0.001346"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.024642" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.052010" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.052233" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.024544" elapsed="0.027747"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.053306" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:22.053451" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.052463" elapsed="0.001189">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.052413" elapsed="0.001342">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.024260" elapsed="0.029814">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.023348" elapsed="0.030891"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.055186" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18392 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.120151" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.120363" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.054605" elapsed="0.065813"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.120530" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:22.120979" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.022649" elapsed="0.098440"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.121638" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.021507" elapsed="0.101261"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.018864" elapsed="0.104146"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.018088" elapsed="0.105024"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.016594" elapsed="0.106640"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.015955" elapsed="0.107371"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.124462" level="INFO">${next} = 18393</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.123677" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.125858" level="INFO">${current_port} = 18393</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.124924" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.011152" elapsed="0.114939"/>
</kw>
<msg time="2026-08-15T23:56:22.126176" level="INFO">Repeating keyword, round 564/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.128695" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.128453" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.128410" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.129612" level="INFO">${current_Date} = 2026-08-15 23:56:22.129</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.129268" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.130751" level="INFO">${ellapsed_seconds} = 2608.208</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.130060" elapsed="0.000779"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.131525" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.131003" elapsed="0.000647"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.130961" elapsed="0.000743"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.127923" elapsed="0.003911"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.133013" level="INFO">${number} = 564</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.132165" elapsed="0.000908"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.135151" level="INFO">${number} = 564</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.134795" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.137121" level="INFO">${device-port} = 18393</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.136330" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.139884" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.167899" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.168117" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.139765" elapsed="0.028411"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.169068" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:22.169246" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.168342" elapsed="0.001014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.168296" elapsed="0.001163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.139491" elapsed="0.030240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.138924" elapsed="0.031044"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.170823" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18393 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.236158" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.236404" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.170320" elapsed="0.066141"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.236572" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:22.237019" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.138469" elapsed="0.098662"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.237702" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.137646" elapsed="0.101192"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.135880" elapsed="0.103175"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.135337" elapsed="0.103821"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.134334" elapsed="0.104948"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.133420" elapsed="0.105964"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.240571" level="INFO">${next} = 18394</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.239745" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.241970" level="INFO">${current_port} = 18394</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.241072" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.126609" elapsed="0.115588"/>
</kw>
<msg time="2026-08-15T23:56:22.242283" level="INFO">Repeating keyword, round 565/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.244976" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.244676" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.244628" elapsed="0.000510"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.245500" level="INFO">${current_Date} = 2026-08-15 23:56:22.245</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.245309" elapsed="0.000225"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.246029" level="INFO">${ellapsed_seconds} = 2608.092</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.245690" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.246387" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.246141" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.246121" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.244027" elapsed="0.002487"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.247051" level="INFO">${number} = 565</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.246660" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.248607" level="INFO">${number} = 565</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.248244" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.250596" level="INFO">${device-port} = 18394</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.249789" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.255696" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.288422" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.288650" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.255596" elapsed="0.033113"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.289646" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:22.289781" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.288924" elapsed="0.001085">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.288873" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.255294" elapsed="0.035094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.252412" elapsed="0.038119"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.291418" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18394 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.356602" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.356856" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.290909" elapsed="0.066005"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.357028" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:22.357442" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.251937" elapsed="0.105616"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.358161" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.251128" elapsed="0.108200"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.249339" elapsed="0.110182"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.248818" elapsed="0.110804"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.247698" elapsed="0.112047"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.247247" elapsed="0.112638"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.361085" level="INFO">${next} = 18395</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.360270" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.362478" level="INFO">${current_port} = 18395</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.361527" elapsed="0.001067"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.242714" elapsed="0.120143"/>
</kw>
<msg time="2026-08-15T23:56:22.362999" level="INFO">Repeating keyword, round 566/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.365612" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.365364" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.365322" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.366541" level="INFO">${current_Date} = 2026-08-15 23:56:22.366</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.366190" elapsed="0.000475"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.367467" level="INFO">${ellapsed_seconds} = 2607.971</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.367053" elapsed="0.000441"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.367829" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.367566" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.367547" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.364797" elapsed="0.003157"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.368495" level="INFO">${number} = 566</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.368115" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.370023" level="INFO">${number} = 566</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.369663" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.372040" level="INFO">${device-port} = 18395</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.371244" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.374911" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.408135" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.408360" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.374777" elapsed="0.033641"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.409356" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:22.409492" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.408599" elapsed="0.000999">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.408549" elapsed="0.001139">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.374291" elapsed="0.035742">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.373888" elapsed="0.036363"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.411132" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18395 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.476483" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.476920" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.410605" elapsed="0.066398"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.477237" elapsed="0.000121"/>
</return>
<msg time="2026-08-15T23:56:22.477791" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.373445" elapsed="0.104524"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.478690" elapsed="0.001161"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.372606" elapsed="0.107458"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.370760" elapsed="0.109555"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.370216" elapsed="0.110213"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.369217" elapsed="0.111343"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.368720" elapsed="0.111947"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.482068" level="INFO">${next} = 18396</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.481183" elapsed="0.000925"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.482971" level="INFO">${current_port} = 18396</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.482351" elapsed="0.000683"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.363473" elapsed="0.119646"/>
</kw>
<msg time="2026-08-15T23:56:22.483177" level="INFO">Repeating keyword, round 567/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.485018" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.484786" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.484753" elapsed="0.000360"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.485576" level="INFO">${current_Date} = 2026-08-15 23:56:22.485</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.485330" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.486323" level="INFO">${ellapsed_seconds} = 2607.852</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.485846" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.486843" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.486458" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.486431" elapsed="0.000527"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.484432" elapsed="0.002590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.487742" level="INFO">${number} = 567</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.487230" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.489791" level="INFO">${number} = 567</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.489316" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.492607" level="INFO">${device-port} = 18396</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.491484" elapsed="0.001236"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.496605" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.527629" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.527768" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.496188" elapsed="0.031641"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.528410" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:56:22.528497" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.527936" elapsed="0.000706">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.527907" elapsed="0.000797">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.495687" elapsed="0.033229">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.495130" elapsed="0.033879"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.529526" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18396 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.596052" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.596258" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.529224" elapsed="0.067090"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.596424" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:22.596863" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.494510" elapsed="0.102468"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.597533" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.493385" elapsed="0.105214"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.490857" elapsed="0.107929"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.490080" elapsed="0.108857"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.488654" elapsed="0.110408"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.488020" elapsed="0.111137"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.600303" level="INFO">${next} = 18397</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.599514" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.601627" level="INFO">${current_port} = 18397</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.600725" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.483514" elapsed="0.118404"/>
</kw>
<msg time="2026-08-15T23:56:22.602008" level="INFO">Repeating keyword, round 568/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.604519" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.604272" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.604230" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.605441" level="INFO">${current_Date} = 2026-08-15 23:56:22.605</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.605092" elapsed="0.000409"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.606550" level="INFO">${ellapsed_seconds} = 2607.732</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.605866" elapsed="0.000743"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.607371" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.606768" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.606727" elapsed="0.000828"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.603706" elapsed="0.003951"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.608489" level="INFO">${number} = 568</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.608023" elapsed="0.000492"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.609936" level="INFO">${number} = 568</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.609579" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.611934" level="INFO">${device-port} = 18397</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.611122" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.614504" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.647915" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.648138" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.614403" elapsed="0.033794"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.649110" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:22.649246" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.648362" elapsed="0.000991">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.648316" elapsed="0.001129">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.614118" elapsed="0.035597">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.613702" elapsed="0.036253"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.650854" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18397 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.715768" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.716015" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.650307" elapsed="0.065764"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.716182" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:22.716580" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.613280" elapsed="0.103408"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.717287" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.612456" elapsed="0.105907"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.610644" elapsed="0.107909"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.610125" elapsed="0.108529"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.609130" elapsed="0.109647"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.608671" elapsed="0.110254"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.720060" level="INFO">${next} = 18398</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.719272" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.721368" level="INFO">${current_port} = 18398</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.720482" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.602425" elapsed="0.119162"/>
</kw>
<msg time="2026-08-15T23:56:22.721674" level="INFO">Repeating keyword, round 569/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.724245" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.724002" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.723957" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.725089" level="INFO">${current_Date} = 2026-08-15 23:56:22.725</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.724717" elapsed="0.000434"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.726254" level="INFO">${ellapsed_seconds} = 2607.612</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.725482" elapsed="0.000832"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.727036" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.726474" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.726431" elapsed="0.000776"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.723434" elapsed="0.003830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.727778" level="INFO">${number} = 569</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.727415" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.729243" level="INFO">${number} = 569</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.728899" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.731267" level="INFO">${device-port} = 18398</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.730451" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.733855" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.767728" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.767983" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.733721" elapsed="0.034323"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.768948" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:22.769083" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.768208" elapsed="0.001063">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.768162" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.733432" elapsed="0.036236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.733035" elapsed="0.036804"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.770672" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18398 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.865942" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.866166" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.770192" elapsed="0.096031"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.866338" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:22.866747" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.732597" elapsed="0.134308"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.867473" elapsed="0.000930"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.731782" elapsed="0.136815"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.729991" elapsed="0.138799"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.729431" elapsed="0.139508"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.728427" elapsed="0.140640"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.727979" elapsed="0.141185"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.870311" level="INFO">${next} = 18399</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.869515" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.871638" level="INFO">${current_port} = 18399</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.870738" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.722174" elapsed="0.149762"/>
</kw>
<msg time="2026-08-15T23:56:22.872026" level="INFO">Repeating keyword, round 570/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.874579" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.874332" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.874287" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.875511" level="INFO">${current_Date} = 2026-08-15 23:56:22.875</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.875164" elapsed="0.000408"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.876687" level="INFO">${ellapsed_seconds} = 2607.462</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.875938" elapsed="0.000808"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.877342" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.876940" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.876897" elapsed="0.000526"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.873765" elapsed="0.003704"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.878006" level="INFO">${number} = 570</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.877615" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.879450" level="INFO">${number} = 570</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.879105" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.881444" level="INFO">${device-port} = 18399</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.880638" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.884003" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:22.911915" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.912136" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.883901" elapsed="0.028293"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.913103" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:22.913238" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:22.912358" elapsed="0.000986">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:22.912312" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.883591" elapsed="0.030122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.883203" elapsed="0.030893"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.914963" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18399 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:22.979914" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:22.980126" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.914449" elapsed="0.065732"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:22.980292" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:22.980695" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.882759" elapsed="0.098084"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:22.981412" elapsed="0.000884"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.881982" elapsed="0.100502"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.880188" elapsed="0.102484"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.879637" elapsed="0.103137"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.878631" elapsed="0.104343"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.878187" elapsed="0.104889"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.984212" level="INFO">${next} = 18400</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.983422" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.985547" level="INFO">${current_port} = 18400</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:22.984633" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.872485" elapsed="0.113287"/>
</kw>
<msg time="2026-08-15T23:56:22.985926" level="INFO">Repeating keyword, round 571/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:22.988001" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:22.987846" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.987797" elapsed="0.000312"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.988582" level="INFO">${current_Date} = 2026-08-15 23:56:22.988</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:22.988354" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:22.989316" level="INFO">${ellapsed_seconds} = 2607.349</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:22.988862" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:22.989825" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:22.989457" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:22.989430" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:22.987490" elapsed="0.002521"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.990761" level="INFO">${number} = 571</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.990228" elapsed="0.000601"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.992915" level="INFO">${number} = 571</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.992400" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:22.995858" level="INFO">${device-port} = 18400</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:22.994639" elapsed="0.001339"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:22.999503" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.031849" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.032069" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:22.999398" elapsed="0.032730"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.033031" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:23.033166" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.032292" elapsed="0.001070">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.032246" elapsed="0.001214">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:22.999110" elapsed="0.034631">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:22.998432" elapsed="0.035483"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.034833" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18400 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.099993" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.100206" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.034267" elapsed="0.065996"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.100377" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:23.100782" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:22.997792" elapsed="0.103150"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.101521" elapsed="0.000891"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:22.996621" elapsed="0.105979"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:22.993984" elapsed="0.108805"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:22.993189" elapsed="0.109750"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.991720" elapsed="0.111344"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:22.991061" elapsed="0.112100"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.104281" level="INFO">${next} = 18401</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.103503" elapsed="0.000839"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.105619" level="INFO">${current_port} = 18401</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.104700" elapsed="0.001040"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:22.986353" elapsed="0.119581"/>
</kw>
<msg time="2026-08-15T23:56:23.106025" level="INFO">Repeating keyword, round 572/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.108534" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.108291" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.108249" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.109612" level="INFO">${current_Date} = 2026-08-15 23:56:23.109</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.109188" elapsed="0.000485"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.110461" level="INFO">${ellapsed_seconds} = 2607.228</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.110051" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.110797" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.110557" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.110539" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.107728" elapsed="0.003217"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.111457" level="INFO">${number} = 572</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.111091" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.113100" level="INFO">${number} = 572</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.112729" elapsed="0.000404"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.115185" level="INFO">${device-port} = 18401</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.114376" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.118041" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.147723" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.147990" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.117757" elapsed="0.030294"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.149057" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:23.149202" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.148220" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.148172" elapsed="0.001239">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.117472" elapsed="0.032262">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.117033" elapsed="0.032960"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.150920" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18401 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.216058" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.216308" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.150353" elapsed="0.066011"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.216478" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:23.216941" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.116589" elapsed="0.100474"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.217634" elapsed="0.001002"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.115739" elapsed="0.103138"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.113893" elapsed="0.105186"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.113314" elapsed="0.105868"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.112271" elapsed="0.107035"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.111639" elapsed="0.107766"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.220654" level="INFO">${next} = 18402</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.219791" elapsed="0.000923"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.222364" level="INFO">${current_port} = 18402</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.221142" elapsed="0.001326"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.106449" elapsed="0.116154"/>
</kw>
<msg time="2026-08-15T23:56:23.222695" level="INFO">Repeating keyword, round 573/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.225331" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.225188" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.225129" elapsed="0.000285"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.225729" level="INFO">${current_Date} = 2026-08-15 23:56:23.226</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.225564" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.226251" level="INFO">${ellapsed_seconds} = 2607.111</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.225921" elapsed="0.000356"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.226591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.226348" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.226328" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.224551" elapsed="0.002163"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.227240" level="INFO">${number} = 573</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.226874" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.228729" level="INFO">${number} = 573</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.228374" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.230769" level="INFO">${device-port} = 18402</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.229964" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.233566" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.267729" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.267993" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.233316" elapsed="0.034742"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.268988" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:23.269125" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.268224" elapsed="0.001091">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.268178" elapsed="0.001235">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.233035" elapsed="0.036654">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.232618" elapsed="0.037243"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.270686" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18402 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.335673" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.335926" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.270209" elapsed="0.065775"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.336099" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:23.336566" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.232191" elapsed="0.104513"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.337350" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.231351" elapsed="0.107098"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.229481" elapsed="0.109238"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.228931" elapsed="0.109964"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.227886" elapsed="0.111141"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.227422" elapsed="0.111702"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.340355" level="INFO">${next} = 18403</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.339474" elapsed="0.000943"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.341729" level="INFO">${current_port} = 18403</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.340858" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.223181" elapsed="0.118851"/>
</kw>
<msg time="2026-08-15T23:56:23.342121" level="INFO">Repeating keyword, round 574/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.344899" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.344606" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.344546" elapsed="0.000498"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.345836" level="INFO">${current_Date} = 2026-08-15 23:56:23.346</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.345453" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.347205" level="INFO">${ellapsed_seconds} = 2606.991</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.346296" elapsed="0.000944"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.347565" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.347324" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.347305" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.344002" elapsed="0.003688"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.348215" level="INFO">${number} = 574</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.347851" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.349660" level="INFO">${number} = 574</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.349314" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.351668" level="INFO">${device-port} = 18403</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.350889" elapsed="0.000860"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.354397" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.387893" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.388126" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.354274" elapsed="0.033911"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.389109" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:23.389246" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.388357" elapsed="0.000999">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.388308" elapsed="0.001140">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.353842" elapsed="0.035887">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.353433" elapsed="0.036551"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.390922" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18403 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.455852" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.456065" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.390397" elapsed="0.065724"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.456233" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:23.456637" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.353015" elapsed="0.103729"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.457376" elapsed="0.000895"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.352209" elapsed="0.106254"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.350395" elapsed="0.108263"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.349865" elapsed="0.108895"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.348871" elapsed="0.110063"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.348397" elapsed="0.110638"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.460245" level="INFO">${next} = 18404</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.459381" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.461623" level="INFO">${current_port} = 18404</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.460691" elapsed="0.001029"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.342565" elapsed="0.119351"/>
</kw>
<msg time="2026-08-15T23:56:23.462009" level="INFO">Repeating keyword, round 575/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.464690" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.464433" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.464379" elapsed="0.000488"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.465740" level="INFO">${current_Date} = 2026-08-15 23:56:23.466</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.465192" elapsed="0.000677"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.466644" level="INFO">${ellapsed_seconds} = 2606.871</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.466202" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.467160" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.466779" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.466752" elapsed="0.000519"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.463890" elapsed="0.003445"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.468073" level="INFO">${number} = 575</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.467544" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.470230" level="INFO">${number} = 575</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.469727" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.473009" level="INFO">${device-port} = 18404</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.471899" elapsed="0.001236"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.476973" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.503741" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.504019" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.476722" elapsed="0.027358"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.505042" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:23.505180" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.504253" elapsed="0.001116">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.504206" elapsed="0.001261">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.476339" elapsed="0.029405">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.475478" elapsed="0.030442"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.506762" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18404 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.572149" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.572368" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.506273" elapsed="0.066150"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.572542" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:23.573001" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.474889" elapsed="0.098223"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.573669" elapsed="0.000887"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.473740" elapsed="0.101010"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.471254" elapsed="0.103724"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.470487" elapsed="0.104592"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.469071" elapsed="0.106132"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.468410" elapsed="0.106888"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.576468" level="INFO">${next} = 18405</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.575644" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.577845" level="INFO">${current_port} = 18405</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.576951" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.462445" elapsed="0.115633"/>
</kw>
<msg time="2026-08-15T23:56:23.578163" level="INFO">Repeating keyword, round 576/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.580526" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.580372" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.580346" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.581118" level="INFO">${current_Date} = 2026-08-15 23:56:23.581</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.580897" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.581790" level="INFO">${ellapsed_seconds} = 2606.756</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.581362" elapsed="0.000485"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.582276" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.581948" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.581923" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.579952" elapsed="0.002496"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.583191" level="INFO">${number} = 576</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.582650" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.585224" level="INFO">${number} = 576</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.584728" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.588034" level="INFO">${device-port} = 18405</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.586897" elapsed="0.001248"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.592040" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.624046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.624267" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.591770" elapsed="0.032556"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.625237" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:23.625372" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.624491" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.624446" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.591348" elapsed="0.034531">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.590483" elapsed="0.035606"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.626952" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18405 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.695676" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.695923" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.626439" elapsed="0.069542"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.696093" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:23.696491" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.589887" elapsed="0.106711"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.697194" elapsed="0.000873"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.588753" elapsed="0.109500"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.586246" elapsed="0.112193"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.585491" elapsed="0.113047"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.584101" elapsed="0.114609"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.583445" elapsed="0.115425"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.700012" level="INFO">${next} = 18406</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.699221" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.701335" level="INFO">${current_port} = 18406</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.700440" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.578591" elapsed="0.122966"/>
</kw>
<msg time="2026-08-15T23:56:23.701641" level="INFO">Repeating keyword, round 577/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.703893" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.703712" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.703685" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.704396" level="INFO">${current_Date} = 2026-08-15 23:56:23.704</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.704184" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.705082" level="INFO">${ellapsed_seconds} = 2606.633</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.704638" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.705552" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.705226" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.705192" elapsed="0.000470"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.703353" elapsed="0.002372"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.706461" level="INFO">${number} = 577</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.705954" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.708522" level="INFO">${number} = 577</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.708047" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.711318" level="INFO">${device-port} = 18406</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.710192" elapsed="0.001237"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.717574" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.752182" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.752406" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.717472" elapsed="0.034992"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.753395" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:23.753527" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.752642" elapsed="0.001078">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.752595" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.717177" elapsed="0.036974">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.713775" elapsed="0.040518"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.755146" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18406 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.824022" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.824234" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.754635" elapsed="0.069654"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:23.824399" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:23.824844" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.713176" elapsed="0.111785"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:23.825589" elapsed="0.000953"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.712065" elapsed="0.114666"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.709520" elapsed="0.117450"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.708776" elapsed="0.118296"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.707374" elapsed="0.119821"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.706729" elapsed="0.120560"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.828424" level="INFO">${next} = 18407</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.827633" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.829754" level="INFO">${current_port} = 18407</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:23.828882" elapsed="0.001034"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.702121" elapsed="0.127922"/>
</kw>
<msg time="2026-08-15T23:56:23.830127" level="INFO">Repeating keyword, round 578/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:23.832619" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:23.832375" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.832333" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.833583" level="INFO">${current_Date} = 2026-08-15 23:56:23.833</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:23.833227" elapsed="0.000415"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:23.834438" level="INFO">${ellapsed_seconds} = 2606.504</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:23.834003" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.834776" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:23.834533" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:23.834515" elapsed="0.000357"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:23.831845" elapsed="0.003072"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.835426" level="INFO">${number} = 578</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.835063" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.836861" level="INFO">${number} = 578</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.836507" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:23.838904" level="INFO">${device-port} = 18407</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:23.838099" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.915356" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:23.928329" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.928578" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.915184" elapsed="0.013459"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:23.929833" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:23.929987" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:23.928889" elapsed="0.001218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:23.928791" elapsed="0.001418">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:23.841037" elapsed="0.089479">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:23.840630" elapsed="0.090136"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:23.931743" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18407 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:23.999671" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:23.999939" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:23.931212" elapsed="0.068789"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.000125" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:24.000557" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:23.840225" elapsed="0.160439"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.001295" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:23.839422" elapsed="0.162970"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:23.837615" elapsed="0.164964"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:23.837044" elapsed="0.165636"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.836065" elapsed="0.166776"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:23.835605" elapsed="0.167339"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.004120" level="INFO">${next} = 18408</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.003290" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.005435" level="INFO">${current_port} = 18408</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.004533" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:23.830546" elapsed="0.175113"/>
</kw>
<msg time="2026-08-15T23:56:24.005747" level="INFO">Repeating keyword, round 579/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.008344" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.008094" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.008051" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.009241" level="INFO">${current_Date} = 2026-08-15 23:56:24.009</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.008850" elapsed="0.000456"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.010473" level="INFO">${ellapsed_seconds} = 2606.328</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.009666" elapsed="0.000871"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.011296" elapsed="0.000093"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.010706" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.010661" elapsed="0.000859"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.007524" elapsed="0.004099"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.012425" level="INFO">${number} = 579</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.011981" elapsed="0.000471"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.013891" level="INFO">${number} = 579</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.013522" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.015964" level="INFO">${device-port} = 18408</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.015112" elapsed="0.000934"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.018714" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.052123" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.052339" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.018615" elapsed="0.033782"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.053316" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:24.053453" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.052558" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.052513" elapsed="0.001241">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.018341" elapsed="0.035736">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.017945" elapsed="0.036282"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.055127" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18408 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.130552" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.130776" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.054577" elapsed="0.076293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.130988" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:24.131412" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.017317" elapsed="0.114206"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.132153" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.016492" elapsed="0.116757"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.014625" elapsed="0.118813"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.014083" elapsed="0.119505"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.013070" elapsed="0.120679"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.012605" elapsed="0.121301"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.135203" level="INFO">${next} = 18409</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.134360" elapsed="0.000915"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.136603" level="INFO">${current_port} = 18409</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.135682" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.006238" elapsed="0.130651"/>
</kw>
<msg time="2026-08-15T23:56:24.136979" level="INFO">Repeating keyword, round 580/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.139529" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.139284" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.139241" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.140470" level="INFO">${current_Date} = 2026-08-15 23:56:24.140</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.140114" elapsed="0.000416"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.141600" level="INFO">${ellapsed_seconds} = 2606.197</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.140902" elapsed="0.000757"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.142412" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.141851" elapsed="0.000686"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.141775" elapsed="0.000817"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.138718" elapsed="0.003977"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.143943" level="INFO">${number} = 580</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.143057" elapsed="0.000945"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.147214" level="INFO">${number} = 580</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.146447" elapsed="0.000795"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.149227" level="INFO">${device-port} = 18409</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.148424" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.152009" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.176029" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.176254" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.151909" elapsed="0.024405"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.177235" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:24.177370" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.176481" elapsed="0.000996">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.176434" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.151609" elapsed="0.026319">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.151212" elapsed="0.026933"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.179288" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18409 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.244197" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.244417" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.178504" elapsed="0.065969"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.244588" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:24.245064" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.150771" elapsed="0.094403"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.245738" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.149746" elapsed="0.097126"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.147957" elapsed="0.099110"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.147401" elapsed="0.099772"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.145375" elapsed="0.101922"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.144347" elapsed="0.103046"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.248541" level="INFO">${next} = 18410</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.247739" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.249945" level="INFO">${current_port} = 18410</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.249032" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.137410" elapsed="0.112761"/>
</kw>
<msg time="2026-08-15T23:56:24.250256" level="INFO">Repeating keyword, round 581/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.252792" elapsed="0.000106"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.252549" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.252506" elapsed="0.000503"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.253380" level="INFO">${current_Date} = 2026-08-15 23:56:24.253</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.253217" elapsed="0.000189"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.253893" level="INFO">${ellapsed_seconds} = 2606.084</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.253554" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.254234" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.253990" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.253971" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.252013" elapsed="0.002344"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.254883" level="INFO">${number} = 581</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.254503" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.256309" level="INFO">${number} = 581</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.255969" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.258295" level="INFO">${device-port} = 18410</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.257504" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.261066" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.295576" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.295793" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.260965" elapsed="0.034923"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.296788" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:56:24.296955" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.296054" elapsed="0.001108">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.296008" elapsed="0.001263">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.260643" elapsed="0.036926">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.260248" elapsed="0.037473"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.298651" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18410 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.364137" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.364404" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.298133" elapsed="0.066328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.364594" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:24.365090" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.259826" elapsed="0.105375"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.365881" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.258835" elapsed="0.108184"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.257046" elapsed="0.110167"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.256494" elapsed="0.110824"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.255508" elapsed="0.111937"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.255065" elapsed="0.112477"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.368725" level="INFO">${next} = 18411</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.367956" elapsed="0.000829"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.370226" level="INFO">${current_port} = 18411</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.369207" elapsed="0.001126"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.250685" elapsed="0.119781"/>
</kw>
<msg time="2026-08-15T23:56:24.370553" level="INFO">Repeating keyword, round 582/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.373298" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.373050" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.373007" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.374257" level="INFO">${current_Date} = 2026-08-15 23:56:24.374</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.373895" elapsed="0.000423"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.375385" level="INFO">${ellapsed_seconds} = 2605.963</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.374652" elapsed="0.000791"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.376235" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.375662" elapsed="0.000641"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.375610" elapsed="0.000717"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.372476" elapsed="0.003897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.376907" level="INFO">${number} = 582</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.376521" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.378377" level="INFO">${number} = 582</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.378025" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.380407" level="INFO">${device-port} = 18411</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.379590" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.383189" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.415599" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.415856" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.383086" elapsed="0.032832"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.416796" elapsed="0.000090"/>
</kw>
<msg time="2026-08-15T23:56:24.416967" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.416085" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.416038" elapsed="0.001128">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.382784" elapsed="0.034665">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.382394" elapsed="0.035277"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.418547" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18411 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.483985" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.484196" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.418059" elapsed="0.066192"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.484362" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:24.484774" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.381973" elapsed="0.102960"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.485488" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.380955" elapsed="0.105671"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.379125" elapsed="0.107737"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.378569" elapsed="0.108399"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.377537" elapsed="0.109557"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.377091" elapsed="0.110101"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.488325" level="INFO">${next} = 18412</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.487539" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.489653" level="INFO">${current_port} = 18412</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.488746" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.371093" elapsed="0.118857"/>
</kw>
<msg time="2026-08-15T23:56:24.490041" level="INFO">Repeating keyword, round 583/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.491759" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.491649" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.491629" elapsed="0.000211"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.492145" level="INFO">${current_Date} = 2026-08-15 23:56:24.492</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.491991" elapsed="0.000181"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.492634" level="INFO">${ellapsed_seconds} = 2605.845</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.492324" elapsed="0.000337"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.492983" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.492731" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.492712" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.491408" elapsed="0.001699"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.493617" level="INFO">${number} = 583</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.493253" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.495083" level="INFO">${number} = 583</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.494720" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.497057" level="INFO">${device-port} = 18412</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.496261" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.499839" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.539821" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.540044" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.499720" elapsed="0.040383"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.541014" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:24.541150" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.540267" elapsed="0.001068">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.540221" elapsed="0.001215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.499444" elapsed="0.042265">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.499048" elapsed="0.042868"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.542792" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18412 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.612215" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.612424" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.542306" elapsed="0.070174"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.612591" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:24.613029" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.498603" elapsed="0.114561"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.613720" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.497591" elapsed="0.117284"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.495787" elapsed="0.119286"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.495270" elapsed="0.119903"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.494260" elapsed="0.121036"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.493812" elapsed="0.121577"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.616528" level="INFO">${next} = 18413</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.615737" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.617950" level="INFO">${current_port} = 18413</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.617005" elapsed="0.001045"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.490511" elapsed="0.127668"/>
</kw>
<msg time="2026-08-15T23:56:24.618263" level="INFO">Repeating keyword, round 584/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.620872" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.620587" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.620544" elapsed="0.000478"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.621901" level="INFO">${current_Date} = 2026-08-15 23:56:24.622</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.621488" elapsed="0.000476"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.622588" level="INFO">${ellapsed_seconds} = 2605.715</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.622275" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.622934" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.622685" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.622666" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.620048" elapsed="0.003011"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.623567" level="INFO">${number} = 584</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.623204" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.625031" level="INFO">${number} = 584</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.624665" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.627131" level="INFO">${device-port} = 18413</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.626322" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.629959" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.663790" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.664042" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.629860" elapsed="0.034239"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.665026" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:24.665161" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.664266" elapsed="0.001001">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.664219" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.629564" elapsed="0.036063">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.629173" elapsed="0.036700"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.666709" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18413 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.731785" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.732065" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.666231" elapsed="0.065895"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.732246" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:24.732674" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.628713" elapsed="0.104079"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.733446" elapsed="0.000949"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.627656" elapsed="0.106940"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.625864" elapsed="0.108978"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.625308" elapsed="0.109648"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.624219" elapsed="0.110870"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.623749" elapsed="0.111442"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.736437" level="INFO">${next} = 18414</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.735563" elapsed="0.000938"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.737895" level="INFO">${current_port} = 18414</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.736934" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.618684" elapsed="0.119439"/>
</kw>
<msg time="2026-08-15T23:56:24.738211" level="INFO">Repeating keyword, round 585/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.740937" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.740637" elapsed="0.000395"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.740585" elapsed="0.000503"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.741493" level="INFO">${current_Date} = 2026-08-15 23:56:24.741</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.741328" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.742001" level="INFO">${ellapsed_seconds} = 2605.596</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.741668" elapsed="0.000360"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.742337" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.742099" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.742079" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.739939" elapsed="0.002524"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.742991" level="INFO">${number} = 585</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.742608" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.744442" level="INFO">${number} = 585</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.744098" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.746427" level="INFO">${device-port} = 18414</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.745623" elapsed="0.000886"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.749197" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.783932" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.784154" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.749094" elapsed="0.035119"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.785155" elapsed="0.000074"/>
</kw>
<msg time="2026-08-15T23:56:24.785313" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.784384" elapsed="0.001127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.784333" elapsed="0.001280">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.748786" elapsed="0.037147">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.748395" elapsed="0.037719"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.786990" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18414 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.852225" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.852444" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.786471" elapsed="0.066028"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.852612" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:24.853064" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.747979" elapsed="0.105198"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.853736" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.746965" elapsed="0.107902"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.745162" elapsed="0.109936"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.744627" elapsed="0.110583"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.743621" elapsed="0.111740"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.743173" elapsed="0.112287"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.856639" level="INFO">${next} = 18415</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.855850" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.858114" level="INFO">${current_port} = 18415</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.857120" elapsed="0.001097"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.738639" elapsed="0.119712"/>
</kw>
<msg time="2026-08-15T23:56:24.858437" level="INFO">Repeating keyword, round 586/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.861111" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.860836" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.860764" elapsed="0.000493"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.862058" level="INFO">${current_Date} = 2026-08-15 23:56:24.862</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.861661" elapsed="0.000457"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.863228" level="INFO">${ellapsed_seconds} = 2605.475</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.862453" elapsed="0.000808"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.863580" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.863342" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.863323" elapsed="0.000336"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.860271" elapsed="0.003434"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.864267" level="INFO">${number} = 586</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.863867" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.865722" level="INFO">${number} = 586</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.865380" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.867730" level="INFO">${device-port} = 18415</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.866942" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.870590" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:24.903844" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.904067" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.870486" elapsed="0.033640"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.905067" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:56:24.905216" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:24.904299" elapsed="0.001030">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:24.904246" elapsed="0.001174">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:24.870187" elapsed="0.035503">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.869767" elapsed="0.036167"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:24.906876" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18415 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:24.980045" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:24.980261" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:24.906287" elapsed="0.074029"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:24.980429" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:24.980879" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.869329" elapsed="0.111664"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:24.981574" elapsed="0.000990"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.868281" elapsed="0.114475"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.866456" elapsed="0.116546"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.865927" elapsed="0.117185"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.864917" elapsed="0.118351"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.864450" elapsed="0.118931"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.984526" level="INFO">${next} = 18416</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.983731" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.986032" level="INFO">${current_port} = 18416</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:24.984998" elapsed="0.001144"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.858969" elapsed="0.127310"/>
</kw>
<msg time="2026-08-15T23:56:24.986370" level="INFO">Repeating keyword, round 587/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:24.989170" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:24.988924" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.988874" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.990086" level="INFO">${current_Date} = 2026-08-15 23:56:24.990</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:24.989653" elapsed="0.000478"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:24.990784" level="INFO">${ellapsed_seconds} = 2605.347</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:24.990339" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:24.991270" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:24.990943" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:24.990917" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:24.988323" elapsed="0.003122"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.992181" level="INFO">${number} = 587</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.991649" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.994318" level="INFO">${number} = 587</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.993841" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:24.997096" level="INFO">${device-port} = 18416</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:24.995986" elapsed="0.001234"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.001052" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.031990" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.032211" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.000911" elapsed="0.031359"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.033189" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:25.033348" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.032438" elapsed="0.001103">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.032393" elapsed="0.001247">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.000464" elapsed="0.033483">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:24.999913" elapsed="0.034180"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.034956" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18416 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.100218" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.100438" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.034443" elapsed="0.066050"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.100608" elapsed="0.000103"/>
</return>
<msg time="2026-08-15T23:56:25.101105" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:24.999300" elapsed="0.101913"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.101767" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:24.997915" elapsed="0.104994"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:24.995333" elapsed="0.107772"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:24.994576" elapsed="0.108647"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.993161" elapsed="0.110191"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:24.992436" elapsed="0.111015"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.104603" level="INFO">${next} = 18417</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.103840" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.106100" level="INFO">${current_port} = 18417</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.105119" elapsed="0.001082"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:24.986870" elapsed="0.119464"/>
</kw>
<msg time="2026-08-15T23:56:25.106421" level="INFO">Repeating keyword, round 588/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.109118" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.108867" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.108819" elapsed="0.000370"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.109536" level="INFO">${current_Date} = 2026-08-15 23:56:25.109</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.109374" elapsed="0.000188"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.110045" level="INFO">${ellapsed_seconds} = 2605.228</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.109711" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.110390" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.110148" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.110129" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.108230" elapsed="0.002284"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.111045" level="INFO">${number} = 588</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.110660" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.112492" level="INFO">${number} = 588</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.112136" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.114553" level="INFO">${device-port} = 18417</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.113715" elapsed="0.000919"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.117392" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.151948" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.152171" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.117289" elapsed="0.034961"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.153182" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:25.153319" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.152413" elapsed="0.001013">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.152367" elapsed="0.001151">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.117015" elapsed="0.036808">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.116586" elapsed="0.037458"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.154914" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18417 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.220084" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.220298" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.154397" elapsed="0.065957"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.220468" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:25.220944" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.116130" elapsed="0.104931"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.221657" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.115099" elapsed="0.107742"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.113253" elapsed="0.109804"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.112692" elapsed="0.110472"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.111675" elapsed="0.111617"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.111228" elapsed="0.112160"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.224580" level="INFO">${next} = 18418</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.223777" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.226005" level="INFO">${current_port} = 18418</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.225051" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.106905" elapsed="0.119331"/>
</kw>
<msg time="2026-08-15T23:56:25.226323" level="INFO">Repeating keyword, round 589/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.228949" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.228670" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.228627" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.229756" level="INFO">${current_Date} = 2026-08-15 23:56:25.230</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.229415" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.230915" level="INFO">${ellapsed_seconds} = 2605.107</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.230183" elapsed="0.000795"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.231742" elapsed="0.000082"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.231142" elapsed="0.000764"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.231095" elapsed="0.000866"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.228133" elapsed="0.003934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.232624" level="INFO">${number} = 589</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.232240" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.234331" level="INFO">${number} = 589</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.233977" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.236586" level="INFO">${device-port} = 18418</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.235741" elapsed="0.000926"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.239384" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.271456" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.271556" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.239279" elapsed="0.032304"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.271995" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:56:25.272054" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.271657" elapsed="0.000530">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.271635" elapsed="0.000650">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.239002" elapsed="0.033560">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.238582" elapsed="0.034122"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.273594" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18418 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.340289" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.340526" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.273087" elapsed="0.067498"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.340703" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:25.341175" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.238160" elapsed="0.103128"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.341911" elapsed="0.000936"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.237142" elapsed="0.105901"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.235258" elapsed="0.108002"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.234521" elapsed="0.108841"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.233498" elapsed="0.109991"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.232822" elapsed="0.110766"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.344743" level="INFO">${next} = 18419</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.343973" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.346132" level="INFO">${current_port} = 18419</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.345217" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.226749" elapsed="0.119612"/>
</kw>
<msg time="2026-08-15T23:56:25.346468" level="INFO">Repeating keyword, round 590/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.349075" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.348794" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.348750" elapsed="0.000470"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.350022" level="INFO">${current_Date} = 2026-08-15 23:56:25.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.349633" elapsed="0.000450"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.351241" level="INFO">${ellapsed_seconds} = 2604.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.350467" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.351597" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.351353" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.351335" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.348259" elapsed="0.003463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.352282" level="INFO">${number} = 590</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.351905" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.353715" level="INFO">${number} = 590</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.353374" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.355725" level="INFO">${device-port} = 18419</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.354946" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.359959" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.402209" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.402435" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.359854" elapsed="0.042639"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.403422" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:25.403558" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.402660" elapsed="0.001007">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.402613" elapsed="0.001148">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.359539" elapsed="0.044545">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.359139" elapsed="0.045167"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.405192" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18419 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.472491" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.472704" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.404673" elapsed="0.068086"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.472911" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:25.473348" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.358685" elapsed="0.114775"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.474109" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.356260" elapsed="0.118962"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.354471" elapsed="0.120942"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.353919" elapsed="0.121596"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.352928" elapsed="0.122711"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.352463" elapsed="0.123278"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.477179" level="INFO">${next} = 18420</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.476247" elapsed="0.001022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.478612" level="INFO">${current_port} = 18420</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.477650" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.346951" elapsed="0.131953"/>
</kw>
<msg time="2026-08-15T23:56:25.478997" level="INFO">Repeating keyword, round 591/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.481552" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.481302" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.481255" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.482344" level="INFO">${current_Date} = 2026-08-15 23:56:25.482</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.482056" elapsed="0.000315"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.482863" level="INFO">${ellapsed_seconds} = 2604.855</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.482521" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.483213" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.482962" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.482942" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.480690" elapsed="0.002649"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.483872" level="INFO">${number} = 591</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.483485" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.485319" level="INFO">${number} = 591</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.484966" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.487315" level="INFO">${device-port} = 18420</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.486512" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.490082" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.523589" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.523907" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.489984" elapsed="0.034006"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.525103" elapsed="0.000072"/>
</kw>
<msg time="2026-08-15T23:56:25.525231" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.524188" elapsed="0.001175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.524134" elapsed="0.001275">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.489681" elapsed="0.035862">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.489287" elapsed="0.036321"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.526003" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18420 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.591366" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.591461" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.525765" elapsed="0.065721"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.591536" elapsed="0.000034"/>
</return>
<msg time="2026-08-15T23:56:25.591721" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.488636" elapsed="0.103135"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.592046" elapsed="0.000417"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.487856" elapsed="0.104701"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.486064" elapsed="0.106579"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.485507" elapsed="0.107182"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.484505" elapsed="0.108241"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.484055" elapsed="0.108733"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.593575" level="INFO">${next} = 18421</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.592971" elapsed="0.000662"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.594914" level="INFO">${current_port} = 18421</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.594035" elapsed="0.000975"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.479426" elapsed="0.115711"/>
</kw>
<msg time="2026-08-15T23:56:25.595223" level="INFO">Repeating keyword, round 592/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.597747" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.597508" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.597467" elapsed="0.000453"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.598663" level="INFO">${current_Date} = 2026-08-15 23:56:25.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.598319" elapsed="0.000401"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.599763" level="INFO">${ellapsed_seconds} = 2604.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.599083" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.600584" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.600007" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.599967" elapsed="0.000792"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.596985" elapsed="0.003909"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.601520" level="INFO">${number} = 592</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.601153" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.602977" level="INFO">${number} = 592</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.602616" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.604983" level="INFO">${device-port} = 18421</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.604186" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.607724" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.643137" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.643352" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.607624" elapsed="0.035785"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.644324" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:25.644456" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.643571" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.643528" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.607347" elapsed="0.037606">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.606946" elapsed="0.038212"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.646024" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18421 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.722113" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.722379" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.645508" elapsed="0.076932"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.722572" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:25.723076" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.606311" elapsed="0.116923"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.723876" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.605502" elapsed="0.119507"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.603694" elapsed="0.121523"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.603166" elapsed="0.122162"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.602170" elapsed="0.123281"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.601703" elapsed="0.123844"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.726729" level="INFO">${next} = 18422</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.725957" elapsed="0.000833"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.728173" level="INFO">${current_port} = 18422</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.727246" elapsed="0.001043"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.595644" elapsed="0.132775"/>
</kw>
<msg time="2026-08-15T23:56:25.728506" level="INFO">Repeating keyword, round 593/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.731241" elapsed="0.000053"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.730881" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.730835" elapsed="0.000581"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.732191" level="INFO">${current_Date} = 2026-08-15 23:56:25.732</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.731760" elapsed="0.000489"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.732732" level="INFO">${ellapsed_seconds} = 2604.605</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.732418" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.733088" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.732846" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.732824" elapsed="0.000343"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.730312" elapsed="0.002901"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.733765" level="INFO">${number} = 593</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.733366" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.735245" level="INFO">${number} = 593</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.734878" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.737338" level="INFO">${device-port} = 18422</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.736515" elapsed="0.000908"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.740344" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.767835" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.768057" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.740239" elapsed="0.027887"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.769054" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:25.769210" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.768308" elapsed="0.001105">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.768262" elapsed="0.001253">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.739961" elapsed="0.029828">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.739330" elapsed="0.030637"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.770886" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18422 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.835952" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.836168" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.770317" elapsed="0.065908"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.836339" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:25.836784" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.738690" elapsed="0.098261"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.837514" elapsed="0.000986"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.737895" elapsed="0.100842"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.736020" elapsed="0.103055"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.735436" elapsed="0.103792"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.734408" elapsed="0.104974"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.733962" elapsed="0.105532"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.841022" level="INFO">${next} = 18423</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.839994" elapsed="0.001092"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.842429" level="INFO">${current_port} = 18423</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.841462" elapsed="0.001067"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.728987" elapsed="0.113675"/>
</kw>
<msg time="2026-08-15T23:56:25.842748" level="INFO">Repeating keyword, round 594/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.845422" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.845177" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.845132" elapsed="0.000441"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.846441" level="INFO">${current_Date} = 2026-08-15 23:56:25.846</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.846027" elapsed="0.000474"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.847408" level="INFO">${ellapsed_seconds} = 2604.491</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.846870" elapsed="0.000566"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.847744" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.847508" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.847489" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.844601" elapsed="0.003289"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.848407" level="INFO">${number} = 594</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.848038" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.849861" level="INFO">${number} = 594</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.849502" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.852006" level="INFO">${device-port} = 18423</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.851186" elapsed="0.000903"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.854772" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:25.884137" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.884362" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.854673" elapsed="0.029747"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.885353" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:25.885490" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:25.884586" elapsed="0.001013">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:25.884539" elapsed="0.001157">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.854395" elapsed="0.031648">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.853761" elapsed="0.032550"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.887194" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18423 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:25.952579" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:25.952841" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.886671" elapsed="0.066229"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:25.953018" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:25.953477" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.853349" elapsed="0.100238"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:25.954205" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.852532" elapsed="0.102785"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.850605" elapsed="0.104907"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.850051" elapsed="0.105563"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.849054" elapsed="0.106686"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.848590" elapsed="0.107298"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.957059" level="INFO">${next} = 18424</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.956243" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.958502" level="INFO">${current_port} = 18424</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:25.957505" elapsed="0.001098"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.843220" elapsed="0.115518"/>
</kw>
<msg time="2026-08-15T23:56:25.958893" level="INFO">Repeating keyword, round 595/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:25.961495" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:25.961200" elapsed="0.000391"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.961155" elapsed="0.000487"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.962323" level="INFO">${current_Date} = 2026-08-15 23:56:25.962</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:25.962014" elapsed="0.000338"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:25.962838" level="INFO">${ellapsed_seconds} = 2604.375</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:25.962501" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:25.963185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:25.962936" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:25.962917" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:25.960629" elapsed="0.002680"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.963896" level="INFO">${number} = 595</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.963456" elapsed="0.000467"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.965347" level="INFO">${number} = 595</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.964993" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:25.967367" level="INFO">${device-port} = 18424</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:25.966563" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:25.970181" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.008112" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.008335" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:25.970072" elapsed="0.038322"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.009348" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:26.009483" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.008559" elapsed="0.001132">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.008514" elapsed="0.001279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:25.969766" elapsed="0.040395">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:25.969135" elapsed="0.041184"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.011192" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18424 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.075951" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.076196" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.010670" elapsed="0.065582"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.076434" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:56:26.076933" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:25.968699" elapsed="0.108349"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.077635" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:25.967914" elapsed="0.110858"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:25.966108" elapsed="0.112908"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:25.965539" elapsed="0.113584"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.964530" elapsed="0.114720"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:25.964083" elapsed="0.115264"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.080646" level="INFO">${next} = 18425</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.079694" elapsed="0.001021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.081680" level="INFO">${current_port} = 18425</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.081130" elapsed="0.000610"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:25.959339" elapsed="0.122526"/>
</kw>
<msg time="2026-08-15T23:56:26.081924" level="INFO">Repeating keyword, round 596/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.083538" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.083381" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.083353" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.084161" level="INFO">${current_Date} = 2026-08-15 23:56:26.084</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.083926" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.084923" level="INFO">${ellapsed_seconds} = 2604.253</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.084449" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.085400" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.085061" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.085035" elapsed="0.000477"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.083037" elapsed="0.002537"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.086314" level="INFO">${number} = 596</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.085778" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.088363" level="INFO">${number} = 596</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.087858" elapsed="0.000543"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.091139" level="INFO">${device-port} = 18425</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.090039" elapsed="0.001213"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.095058" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.127544" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.127696" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.094915" elapsed="0.032818"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.128352" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:26.128438" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.127883" elapsed="0.000626">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.127839" elapsed="0.000728">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.094470" elapsed="0.034285">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.093594" elapsed="0.035329"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.129459" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18425 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.195879" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.196022" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.129151" elapsed="0.066908"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.196137" elapsed="0.000052"/>
</return>
<msg time="2026-08-15T23:56:26.196423" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.093016" elapsed="0.103478"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.196900" elapsed="0.000583"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.091893" elapsed="0.105710"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.089376" elapsed="0.108348"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.088623" elapsed="0.109166"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.087213" elapsed="0.110687"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.086568" elapsed="0.111395"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.198699" level="INFO">${next} = 18426</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.198192" elapsed="0.000546"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.199638" level="INFO">${current_port} = 18426</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.199015" elapsed="0.000688"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.082211" elapsed="0.117615"/>
</kw>
<msg time="2026-08-15T23:56:26.199890" level="INFO">Repeating keyword, round 597/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.201554" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.201400" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.201372" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.202133" level="INFO">${current_Date} = 2026-08-15 23:56:26.202</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.201894" elapsed="0.000278"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.202902" level="INFO">${ellapsed_seconds} = 2604.135</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.202394" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.203420" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.203048" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.203019" elapsed="0.000521"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.201051" elapsed="0.002557"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.204389" level="INFO">${number} = 597</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.203847" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.206565" level="INFO">${number} = 597</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.206024" elapsed="0.000578"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.209511" level="INFO">${device-port} = 18426</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.208353" elapsed="0.001276"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.213174" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.247663" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.247824" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.213063" elapsed="0.034800"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.248421" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:56:26.248505" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.247968" elapsed="0.000663">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.247939" elapsed="0.000753">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.212741" elapsed="0.036149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.212140" elapsed="0.036841"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.249501" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18426 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.315950" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.316180" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.249199" elapsed="0.067040"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.316362" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:26.316793" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.211512" elapsed="0.105448"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.317562" elapsed="0.001024"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.210304" elapsed="0.108486"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.207659" elapsed="0.111395"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.206850" elapsed="0.112316"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.205346" elapsed="0.113955"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.204659" elapsed="0.114744"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.320634" level="INFO">${next} = 18427</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.319779" elapsed="0.000920"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.322145" level="INFO">${current_port} = 18427</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.321142" elapsed="0.001108"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.200178" elapsed="0.122245"/>
</kw>
<msg time="2026-08-15T23:56:26.322519" level="INFO">Repeating keyword, round 598/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.325215" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.324958" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.324916" elapsed="0.000444"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.326153" level="INFO">${current_Date} = 2026-08-15 23:56:26.326</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.325763" elapsed="0.000453"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.327256" level="INFO">${ellapsed_seconds} = 2604.011</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.326634" elapsed="0.000648"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.327597" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.327353" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.327335" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.324396" elapsed="0.003326"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.328258" level="INFO">${number} = 598</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.327891" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.329706" level="INFO">${number} = 598</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.329357" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.331731" level="INFO">${device-port} = 18427</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.330948" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.334512" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.371785" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.372067" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.334403" elapsed="0.037726"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.373059" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:26.373207" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.372299" elapsed="0.001024">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.372252" elapsed="0.001171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.334110" elapsed="0.039610">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.333482" elapsed="0.040551"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.374939" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18427 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.439681" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.439990" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.374412" elapsed="0.065642"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.440188" elapsed="0.000092"/>
</return>
<msg time="2026-08-15T23:56:26.440649" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.333067" elapsed="0.107691"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.441467" elapsed="0.000989"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.332266" elapsed="0.110388"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.330472" elapsed="0.112424"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.329913" elapsed="0.113096"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.328908" elapsed="0.114253"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.328440" elapsed="0.114824"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.444469" level="INFO">${next} = 18428</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.443617" elapsed="0.000913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.446058" level="INFO">${current_port} = 18428</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.444949" elapsed="0.001228"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.323029" elapsed="0.123289"/>
</kw>
<msg time="2026-08-15T23:56:26.446408" level="INFO">Repeating keyword, round 599/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.449109" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.448850" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.448773" elapsed="0.000506"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.450076" level="INFO">${current_Date} = 2026-08-15 23:56:26.450</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.449673" elapsed="0.000472"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.450717" level="INFO">${ellapsed_seconds} = 2603.887</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.450384" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.451194" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.450832" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.450796" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.448264" elapsed="0.003072"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.451877" level="INFO">${number} = 599</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.451487" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.453377" level="INFO">${number} = 599</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.453004" elapsed="0.000400"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.455377" level="INFO">${device-port} = 18428</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.454570" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.458308" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.491479" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.491701" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.458202" elapsed="0.033557"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.492679" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:26.492842" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.491967" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.491918" elapsed="0.001249">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.457923" elapsed="0.035533">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.457159" elapsed="0.036441"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.494474" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18428 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.559605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.559738" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.493982" elapsed="0.065791"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.559869" elapsed="0.000046"/>
</return>
<msg time="2026-08-15T23:56:26.560125" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.456728" elapsed="0.103466"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.560568" elapsed="0.000561"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.455931" elapsed="0.105318"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.454117" elapsed="0.107250"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.453563" elapsed="0.107867"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.452526" elapsed="0.108981"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.452061" elapsed="0.109506"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.562290" level="INFO">${next} = 18429</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.561785" elapsed="0.000548"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.563160" level="INFO">${current_port} = 18429</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.562581" elapsed="0.000642"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.446899" elapsed="0.116433"/>
</kw>
<msg time="2026-08-15T23:56:26.563403" level="INFO">Repeating keyword, round 600/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.565108" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.564954" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.564927" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.565671" level="INFO">${current_Date} = 2026-08-15 23:56:26.566</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.565451" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.566435" level="INFO">${ellapsed_seconds} = 2603.771</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.565950" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.566922" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.566571" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.566545" elapsed="0.000490"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.564582" elapsed="0.002517"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.567850" level="INFO">${number} = 600</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.567320" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.569732" level="INFO">${number} = 600</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.569387" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.571715" level="INFO">${device-port} = 18429</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.570935" elapsed="0.000861"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.574531" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.611616" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.611878" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.574422" elapsed="0.037518"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.612877" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:26.613017" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.612136" elapsed="0.000994">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.612086" elapsed="0.001149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.574144" elapsed="0.039381">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.573529" elapsed="0.040204"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.614640" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18429 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.679850" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.680065" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.614122" elapsed="0.066003"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.680253" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:26.680668" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.573104" elapsed="0.107671"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.681414" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.572261" elapsed="0.110248"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.570459" elapsed="0.112239"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.569935" elapsed="0.112906"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.568784" elapsed="0.114191"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.568108" elapsed="0.114967"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.684259" level="INFO">${next} = 18430</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.683425" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.685613" level="INFO">${current_port} = 18430</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.684678" elapsed="0.001032"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.563691" elapsed="0.122214"/>
</kw>
<msg time="2026-08-15T23:56:26.685997" level="INFO">Repeating keyword, round 601/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.688532" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.688286" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.688242" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.689394" level="INFO">${current_Date} = 2026-08-15 23:56:26.689</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.689033" elapsed="0.000420"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.690501" level="INFO">${ellapsed_seconds} = 2603.648</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.689784" elapsed="0.000775"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.691271" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.690716" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.690673" elapsed="0.000823"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.687713" elapsed="0.003897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.692517" level="INFO">${number} = 601</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.691969" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.693967" level="INFO">${number} = 601</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.693612" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.695955" level="INFO">${device-port} = 18430</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.695144" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.698719" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.728259" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.728481" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.698570" elapsed="0.029969"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.729463" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:26.729595" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.728710" elapsed="0.001080">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.728663" elapsed="0.001257">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.698293" elapsed="0.031909">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.697685" elapsed="0.032658"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.731250" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18430 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.795749" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.795995" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.730690" elapsed="0.065361"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.796163" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:26.796569" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.697270" elapsed="0.099409"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.797277" elapsed="0.000887"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.696470" elapsed="0.101887"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.694673" elapsed="0.103871"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.694155" elapsed="0.104489"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.693168" elapsed="0.105667"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.692699" elapsed="0.106239"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.800112" level="INFO">${next} = 18431</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.799313" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.801440" level="INFO">${current_port} = 18431</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.800534" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.686421" elapsed="0.115244"/>
</kw>
<msg time="2026-08-15T23:56:26.801750" level="INFO">Repeating keyword, round 602/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.804349" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.804103" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.804059" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.805288" level="INFO">${current_Date} = 2026-08-15 23:56:26.805</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.804931" elapsed="0.000417"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.806476" level="INFO">${ellapsed_seconds} = 2603.532</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.805684" elapsed="0.000855"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.807402" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.806791" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.806720" elapsed="0.000767"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.803535" elapsed="0.003999"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.808142" level="INFO">${number} = 602</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.807682" elapsed="0.000494"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.809822" level="INFO">${number} = 602</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.809398" elapsed="0.000461"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.811982" level="INFO">${device-port} = 18431</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.811180" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.816286" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.843958" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.844183" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.816185" elapsed="0.028056"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.845165" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:26.845302" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.844407" elapsed="0.001002">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.844361" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.815904" elapsed="0.029875">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.813703" elapsed="0.032335"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.846944" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18431 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:26.911730" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.911973" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.846423" elapsed="0.065607"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:26.912139" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:26.912544" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.813297" elapsed="0.099354"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:26.913266" elapsed="0.000942"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.812493" elapsed="0.101909"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.810703" elapsed="0.103886"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.810063" elapsed="0.104626"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.808924" elapsed="0.105928"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.808368" elapsed="0.106587"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.916088" level="INFO">${next} = 18432</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.915300" elapsed="0.000848"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.917397" level="INFO">${current_port} = 18432</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:26.916506" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.802237" elapsed="0.115383"/>
</kw>
<msg time="2026-08-15T23:56:26.917705" level="INFO">Repeating keyword, round 603/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:26.920270" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:26.920029" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.919987" elapsed="0.000425"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.921118" level="INFO">${current_Date} = 2026-08-15 23:56:26.921</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:26.920736" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:26.922353" level="INFO">${ellapsed_seconds} = 2603.416</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:26.921521" elapsed="0.000860"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.922696" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:26.922454" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:26.922434" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:26.919463" elapsed="0.003373"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.923349" level="INFO">${number} = 603</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.922983" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.924774" level="INFO">${number} = 603</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.924437" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:26.926760" level="INFO">${device-port} = 18432</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:26.925981" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.929474" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:26.955611" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:26.955862" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.929378" elapsed="0.026546"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:26.956785" elapsed="0.000086"/>
</kw>
<msg time="2026-08-15T23:56:26.956950" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:26.956086" elapsed="0.001043">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:26.956041" elapsed="0.001186">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:26.929100" elapsed="0.028399">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:26.928504" elapsed="0.029162"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:26.958555" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18432 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.027766" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.028011" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:26.958046" elapsed="0.070020"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.028177" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:27.028572" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:26.928095" elapsed="0.100586"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.029303" elapsed="0.000868"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:26.927296" elapsed="0.103064"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:26.925497" elapsed="0.105050"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:26.924974" elapsed="0.105674"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.923989" elapsed="0.106783"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:26.923527" elapsed="0.107388"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.032043" level="INFO">${next} = 18433</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.031259" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.033504" level="INFO">${current_port} = 18433</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.032462" elapsed="0.001145"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:26.918203" elapsed="0.115550"/>
</kw>
<msg time="2026-08-15T23:56:27.033904" level="INFO">Repeating keyword, round 604/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.036423" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.036164" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.036122" elapsed="0.000444"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.037409" level="INFO">${current_Date} = 2026-08-15 23:56:27.037</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.037055" elapsed="0.000413"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.038327" level="INFO">${ellapsed_seconds} = 2603.3</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.037832" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.038657" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.038425" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.038406" elapsed="0.000330"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.035606" elapsed="0.003175"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.039309" level="INFO">${number} = 604</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.038945" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.040748" level="INFO">${number} = 604</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.040400" elapsed="0.000374"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.042724" level="INFO">${device-port} = 18433</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.041957" elapsed="0.000862"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.045489" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.080310" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.080527" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.045386" elapsed="0.035200"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.081517" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:27.081652" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.080775" elapsed="0.000981">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.080728" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.045103" elapsed="0.037051">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.044476" elapsed="0.037888"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.083229" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18433 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.152031" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.152258" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.082719" elapsed="0.069596"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.152428" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:27.152884" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.044061" elapsed="0.108938"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.153565" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.043258" elapsed="0.111376"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.041488" elapsed="0.113379"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.040965" elapsed="0.114008"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.039950" elapsed="0.115149"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.039489" elapsed="0.115709"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.156365" level="INFO">${next} = 18434</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.155547" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.157871" level="INFO">${current_port} = 18434</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.156785" elapsed="0.001190"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.034340" elapsed="0.123764"/>
</kw>
<msg time="2026-08-15T23:56:27.158171" level="INFO">Repeating keyword, round 605/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.159698" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.159547" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.159520" elapsed="0.000266"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.160246" level="INFO">${current_Date} = 2026-08-15 23:56:27.160</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.160015" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.160941" level="INFO">${ellapsed_seconds} = 2603.177</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.160495" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.161401" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.161075" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.161048" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.159217" elapsed="0.002356"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.162317" level="INFO">${number} = 605</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.161775" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.164472" level="INFO">${number} = 605</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.163861" elapsed="0.000651"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.167254" level="INFO">${device-port} = 18434</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.166151" elapsed="0.001214"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.170546" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.204046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.204268" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.170444" elapsed="0.033883"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.205228" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:27.205361" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.204491" elapsed="0.001064">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.204445" elapsed="0.001209">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.169980" elapsed="0.035981">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.169571" elapsed="0.036535"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.206980" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18434 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.282427" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.282667" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.206457" elapsed="0.076239"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.282815" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:27.283126" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.169162" elapsed="0.114017"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.283526" elapsed="0.000507"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.168007" elapsed="0.116118"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.165487" elapsed="0.118732"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.164739" elapsed="0.119530"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.163219" elapsed="0.121113"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.162572" elapsed="0.121807"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.284937" level="INFO">${next} = 18435</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.284543" elapsed="0.000422"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.285542" level="INFO">${current_port} = 18435</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.285134" elapsed="0.000452"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.158432" elapsed="0.127214"/>
</kw>
<msg time="2026-08-15T23:56:27.285686" level="INFO">Repeating keyword, round 606/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.286954" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.286826" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.286778" elapsed="0.000242"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.287419" level="INFO">${current_Date} = 2026-08-15 23:56:27.287</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.287244" elapsed="0.000202"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.287954" level="INFO">${ellapsed_seconds} = 2603.05</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.287599" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.288311" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.288052" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.288033" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.286551" elapsed="0.001886"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.288985" level="INFO">${number} = 606</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.288591" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.290473" level="INFO">${number} = 606</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.290123" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.292578" level="INFO">${device-port} = 18435</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.291764" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.295383" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.327863" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.328086" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.295048" elapsed="0.033097"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.329049" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:27.329184" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.328308" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.328263" elapsed="0.001119">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.294741" elapsed="0.034925">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.294345" elapsed="0.035566"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.330746" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18435 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.396045" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.396260" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.330265" elapsed="0.066051"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.396428" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:27.396872" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.293925" elapsed="0.103062"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.397552" elapsed="0.000923"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.293121" elapsed="0.105566"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.291302" elapsed="0.107629"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.290660" elapsed="0.108374"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.289647" elapsed="0.109511"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.289169" elapsed="0.110086"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.400435" level="INFO">${next} = 18436</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.399602" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.401776" level="INFO">${current_port} = 18436</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.400903" elapsed="0.001036"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.285938" elapsed="0.116132"/>
</kw>
<msg time="2026-08-15T23:56:27.402169" level="INFO">Repeating keyword, round 607/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.404787" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.404544" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.404502" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.405651" level="INFO">${current_Date} = 2026-08-15 23:56:27.405</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.405304" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.406889" level="INFO">${ellapsed_seconds} = 2602.932</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.406078" elapsed="0.000874"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.407455" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.407117" elapsed="0.000393"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.407069" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.404011" elapsed="0.003569"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.408109" level="INFO">${number} = 607</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.407725" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.409551" level="INFO">${number} = 607</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.409211" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.411547" level="INFO">${device-port} = 18436</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.410747" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.414138" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.448574" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.448829" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.414026" elapsed="0.034867"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.449840" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:27.449979" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.449062" elapsed="0.001140">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.449016" elapsed="0.001296">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.413688" elapsed="0.036900">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.413296" elapsed="0.037435"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.451602" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18436 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.520005" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.520260" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.451114" elapsed="0.069205"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.520446" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:56:27.520940" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.412882" elapsed="0.108174"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.521687" elapsed="0.000951"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.412082" elapsed="0.110795"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.410284" elapsed="0.112793"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.409741" elapsed="0.113456"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.408745" elapsed="0.114602"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.408297" elapsed="0.115155"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.524700" level="INFO">${next} = 18437</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.523885" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.526229" level="INFO">${current_port} = 18437</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.525195" elapsed="0.001133"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.402658" elapsed="0.123803"/>
</kw>
<msg time="2026-08-15T23:56:27.526549" level="INFO">Repeating keyword, round 608/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.529220" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.528968" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.528922" elapsed="0.000444"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.530372" level="INFO">${current_Date} = 2026-08-15 23:56:27.530</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.530044" elapsed="0.000357"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.530902" level="INFO">${ellapsed_seconds} = 2602.807</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.530556" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.531263" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.531008" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.530989" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.528390" elapsed="0.003000"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.531935" level="INFO">${number} = 608</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.531539" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.533410" level="INFO">${number} = 608</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.533059" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.535427" level="INFO">${device-port} = 18437</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.534624" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.538177" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.568040" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.568274" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.537905" elapsed="0.030429"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.569321" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:27.569465" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.568511" elapsed="0.001063">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.568460" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.537605" elapsed="0.032382">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.537180" elapsed="0.033047"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.571114" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18437 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.635526" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.635740" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.570598" elapsed="0.065197"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.635945" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:27.636363" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.536744" elapsed="0.099726"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.637128" elapsed="0.000949"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.535966" elapsed="0.102300"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.534175" elapsed="0.104284"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.533614" elapsed="0.104948"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.532584" elapsed="0.106103"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.532128" elapsed="0.106658"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.640030" level="INFO">${next} = 18438</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.639196" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.641450" level="INFO">${current_port} = 18438</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.640466" elapsed="0.001047"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.527039" elapsed="0.114559"/>
</kw>
<msg time="2026-08-15T23:56:27.641654" level="INFO">Repeating keyword, round 609/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.643306" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.643115" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.643087" elapsed="0.000324"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.643860" level="INFO">${current_Date} = 2026-08-15 23:56:27.644</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.643613" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.644546" level="INFO">${ellapsed_seconds} = 2602.693</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.644105" elapsed="0.000478"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.645140" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.644680" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.644655" elapsed="0.000600"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.642757" elapsed="0.002562"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.646054" level="INFO">${number} = 609</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.645522" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.648073" level="INFO">${number} = 609</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.647580" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.650867" level="INFO">${device-port} = 18438</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.649734" elapsed="0.001248"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.654717" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.688135" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.688359" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.654576" elapsed="0.033841"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.689407" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:27.689542" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.688609" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.688561" elapsed="0.001320">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.653966" elapsed="0.036202">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.653354" elapsed="0.036957"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.691182" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18438 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.755919" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.756169" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.690661" elapsed="0.065566"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.756342" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:27.756759" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.652729" elapsed="0.104188"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.757485" elapsed="0.000929"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.651591" elapsed="0.107016"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.649112" elapsed="0.109726"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.648332" elapsed="0.110615"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.646954" elapsed="0.112120"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.646308" elapsed="0.112860"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.760325" level="INFO">${next} = 18439</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.759511" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.761660" level="INFO">${current_port} = 18439</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.760760" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.641965" elapsed="0.119990"/>
</kw>
<msg time="2026-08-15T23:56:27.762043" level="INFO">Repeating keyword, round 610/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.764713" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.764468" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.764424" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.765506" level="INFO">${current_Date} = 2026-08-15 23:56:27.765</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.765332" elapsed="0.000201"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.766016" level="INFO">${ellapsed_seconds} = 2602.572</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.765683" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.766357" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.766112" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.766095" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.763859" elapsed="0.002622"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.767005" level="INFO">${number} = 610</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.766627" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.768457" level="INFO">${number} = 610</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.768103" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.770542" level="INFO">${device-port} = 18439</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.769636" elapsed="0.000989"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.773291" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.807560" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.807840" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.773191" elapsed="0.034714"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.808784" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:27.808955" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.808072" elapsed="0.000993">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.808026" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.772735" elapsed="0.036705">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.772342" elapsed="0.037316"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.810534" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18439 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:27.875547" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.875763" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.810042" elapsed="0.065810"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:27.875964" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:27.876374" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.771904" elapsed="0.104579"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:27.877091" elapsed="0.000905"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.771089" elapsed="0.107096"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.769186" elapsed="0.109188"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.768643" elapsed="0.109833"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.767629" elapsed="0.110972"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.767187" elapsed="0.111509"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.879921" level="INFO">${next} = 18440</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.879082" elapsed="0.000901"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.881258" level="INFO">${current_port} = 18440</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:27.880357" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.762472" elapsed="0.119007"/>
</kw>
<msg time="2026-08-15T23:56:27.881565" level="INFO">Repeating keyword, round 611/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:27.884175" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:27.883927" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.883882" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.885022" level="INFO">${current_Date} = 2026-08-15 23:56:27.885</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:27.884639" elapsed="0.000444"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:27.886145" level="INFO">${ellapsed_seconds} = 2602.452</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:27.885413" elapsed="0.000791"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.886921" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:27.886362" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:27.886320" elapsed="0.000779"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:27.883342" elapsed="0.003857"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.888379" level="INFO">${number} = 611</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.887595" elapsed="0.000811"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.889925" level="INFO">${number} = 611</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.889475" elapsed="0.000477"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:27.891987" level="INFO">${device-port} = 18440</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:27.891162" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.894679" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:27.927945" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:27.928181" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.894575" elapsed="0.033665"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:27.929193" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:27.929328" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:27.928419" elapsed="0.001117">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:27.928369" elapsed="0.001267">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:27.894299" elapsed="0.035654">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:27.893722" elapsed="0.036379"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:27.930992" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18440 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.000049" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.000320" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:27.930452" elapsed="0.069924"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.000506" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:56:28.001009" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:27.893308" elapsed="0.107813"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.001708" elapsed="0.001001"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:27.892506" elapsed="0.110434"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:27.890686" elapsed="0.112446"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:27.890111" elapsed="0.113126"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.889028" elapsed="0.114336"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:27.888561" elapsed="0.114900"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.004628" level="INFO">${next} = 18441</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.003849" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.006037" level="INFO">${current_port} = 18441</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.005121" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:27.882048" elapsed="0.124216"/>
</kw>
<msg time="2026-08-15T23:56:28.006351" level="INFO">Repeating keyword, round 612/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.009013" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.008733" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.008690" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.010149" level="INFO">${current_Date} = 2026-08-15 23:56:28.010</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.009588" elapsed="0.000626"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.011272" level="INFO">${ellapsed_seconds} = 2602.327</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.010631" elapsed="0.000667"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.011620" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.011369" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.011351" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.008198" elapsed="0.003545"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.012269" level="INFO">${number} = 612</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.011904" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.013715" level="INFO">${number} = 612</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.013374" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.015768" level="INFO">${device-port} = 18441</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.014985" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.018583" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.051638" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.051899" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.018467" elapsed="0.033493"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.052877" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:28.053018" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.052132" elapsed="0.000995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.052082" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.018156" elapsed="0.035349">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.017529" elapsed="0.036211"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.054645" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18441 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.125130" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.125526" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.054125" elapsed="0.071474"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.125788" elapsed="0.000194"/>
</return>
<msg time="2026-08-15T23:56:28.126418" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.017113" elapsed="0.109422"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.127239" elapsed="0.001035"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.016310" elapsed="0.112167"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.014497" elapsed="0.114183"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.013917" elapsed="0.114869"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.012925" elapsed="0.116057"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.012454" elapsed="0.116643"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.130376" level="INFO">${next} = 18442</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.129461" elapsed="0.000977"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.131776" level="INFO">${current_port} = 18442</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.130859" elapsed="0.001065"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.006884" elapsed="0.125185"/>
</kw>
<msg time="2026-08-15T23:56:28.132173" level="INFO">Repeating keyword, round 613/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.134508" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.134391" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.134364" elapsed="0.000209"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.134911" level="INFO">${current_Date} = 2026-08-15 23:56:28.135</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.134722" elapsed="0.000216"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.135418" level="INFO">${ellapsed_seconds} = 2602.202</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.135087" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.135770" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.135514" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.135495" elapsed="0.000369"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.134086" elapsed="0.001823"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.136420" level="INFO">${number} = 613</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.136055" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.137894" level="INFO">${number} = 613</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.137519" elapsed="0.000403"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.139900" level="INFO">${device-port} = 18442</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.139086" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.142641" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.175649" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.175934" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.142535" elapsed="0.033463"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.176968" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:28.177110" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.176171" elapsed="0.001143">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.176122" elapsed="0.001362">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.142256" elapsed="0.035601">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.141646" elapsed="0.036371"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.178913" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18442 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.243890" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.244157" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.178378" elapsed="0.065838"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.244341" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:28.244786" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.141220" elapsed="0.103730"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.245598" elapsed="0.000975"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.140421" elapsed="0.106346"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.138611" elapsed="0.108405"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.138081" elapsed="0.109059"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.137072" elapsed="0.110211"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.136601" elapsed="0.110783"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.248580" level="INFO">${next} = 18443</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.247736" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.250094" level="INFO">${current_port} = 18443</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.249096" elapsed="0.001117"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.132636" elapsed="0.117714"/>
</kw>
<msg time="2026-08-15T23:56:28.250439" level="INFO">Repeating keyword, round 614/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.253201" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.252862" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.252785" elapsed="0.000512"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.253675" level="INFO">${current_Date} = 2026-08-15 23:56:28.254</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.253502" elapsed="0.000200"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.254210" level="INFO">${ellapsed_seconds} = 2602.083</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.253873" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.254574" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.254319" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.254299" elapsed="0.000357"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.252283" elapsed="0.002420"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.255252" level="INFO">${number} = 614</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.254870" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.256740" level="INFO">${number} = 614</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.256389" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.258865" level="INFO">${device-port} = 18443</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.258010" elapsed="0.000939"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.263895" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.292126" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.292351" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.263765" elapsed="0.028644"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.293407" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:28.293544" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.292581" elapsed="0.001072">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.292533" elapsed="0.001216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.263470" elapsed="0.030622">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.260654" elapsed="0.033657"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.295201" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18443 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.364584" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.364953" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.294661" elapsed="0.070352"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.365154" elapsed="0.000134"/>
</return>
<msg time="2026-08-15T23:56:28.365697" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.260226" elapsed="0.105628"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.366485" elapsed="0.000970"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.259406" elapsed="0.108240"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.257531" elapsed="0.110354"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.256981" elapsed="0.111011"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.255919" elapsed="0.112201"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.255447" elapsed="0.112834"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.369386" level="INFO">${next} = 18444</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.368633" elapsed="0.000791"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.370368" level="INFO">${current_port} = 18444</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.369780" elapsed="0.000648"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.250937" elapsed="0.119571"/>
</kw>
<msg time="2026-08-15T23:56:28.370563" level="INFO">Repeating keyword, round 615/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.372287" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.372104" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.372075" elapsed="0.000302"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.372840" level="INFO">${current_Date} = 2026-08-15 23:56:28.373</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.372583" elapsed="0.000296"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.373532" level="INFO">${ellapsed_seconds} = 2601.964</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.373086" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.374030" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.373665" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.373639" elapsed="0.000502"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.371741" elapsed="0.002463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.374935" level="INFO">${number} = 615</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.374406" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.377093" level="INFO">${number} = 615</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.376527" elapsed="0.000603"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.379902" level="INFO">${device-port} = 18444</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.378751" elapsed="0.001264"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.383267" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.419659" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.419960" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.383138" elapsed="0.036887"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.421041" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:28.421184" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.420206" elapsed="0.001204">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.420156" elapsed="0.001355">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.382448" elapsed="0.039386">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.382057" elapsed="0.039932"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.422916" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18444 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.498160" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.498384" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.422360" elapsed="0.076078"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.498566" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:28.499050" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.381620" elapsed="0.117543"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.499752" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.380677" elapsed="0.120260"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.378123" elapsed="0.123008"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.377354" elapsed="0.123881"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.375869" elapsed="0.125493"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.375187" elapsed="0.126272"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.502628" level="INFO">${next} = 18445</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.501849" elapsed="0.000840"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.504081" level="INFO">${current_port} = 18445</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.503111" elapsed="0.001076"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.370920" elapsed="0.133374"/>
</kw>
<msg time="2026-08-15T23:56:28.504352" level="INFO">Repeating keyword, round 616/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.506034" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.505876" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.505846" elapsed="0.000277"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.506609" level="INFO">${current_Date} = 2026-08-15 23:56:28.506</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.506377" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.507351" level="INFO">${ellapsed_seconds} = 2601.831</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.506873" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.507853" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.507489" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.507463" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.505482" elapsed="0.002550"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.508742" level="INFO">${number} = 616</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.508235" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.510752" level="INFO">${number} = 616</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.510279" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.513551" level="INFO">${device-port} = 18445</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.512444" elapsed="0.001219"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.517246" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.543868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.544131" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.516936" elapsed="0.027255"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.545221" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:28.545365" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.544379" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.544324" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.516583" elapsed="0.029303">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.516110" elapsed="0.030011"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.547005" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18445 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.616489" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.616705" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.546482" elapsed="0.070278"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.616912" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:28.617335" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.515500" elapsed="0.101948"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.618164" elapsed="0.001269"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.514304" elapsed="0.105384"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.511790" elapsed="0.108239"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.511035" elapsed="0.109151"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.509638" elapsed="0.110706"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.509017" elapsed="0.111428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.621623" level="INFO">${next} = 18446</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.620845" elapsed="0.000838"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.623036" level="INFO">${current_port} = 18446</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.622093" elapsed="0.001041"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.504632" elapsed="0.118634"/>
</kw>
<msg time="2026-08-15T23:56:28.623352" level="INFO">Repeating keyword, round 617/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.626030" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.625739" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.625695" elapsed="0.000483"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.626983" level="INFO">${current_Date} = 2026-08-15 23:56:28.627</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.626512" elapsed="0.000535"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.627708" level="INFO">${ellapsed_seconds} = 2601.71</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.627360" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.628080" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.627821" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.627786" elapsed="0.000376"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.625188" elapsed="0.003027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.628745" level="INFO">${number} = 617</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.628366" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.630229" level="INFO">${number} = 617</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.629875" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.632322" level="INFO">${device-port} = 18446</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.631496" elapsed="0.000927"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.635726" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.668247" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.668488" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.635569" elapsed="0.032980"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.669487" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:28.669623" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.668718" elapsed="0.001147">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.668671" elapsed="0.001296">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.635181" elapsed="0.035074">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.634627" elapsed="0.035881"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.671376" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18446 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.740103" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.740343" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.670933" elapsed="0.069470"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.740529" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:56:28.741055" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.634071" elapsed="0.107100"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.741773" elapsed="0.001021"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.633018" elapsed="0.110024"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.631015" elapsed="0.112228"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.630419" elapsed="0.112931"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.629405" elapsed="0.114072"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.628949" elapsed="0.114627"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.744790" level="INFO">${next} = 18447</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.744000" elapsed="0.000926"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.746276" level="INFO">${current_port} = 18447</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.745308" elapsed="0.001073"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.623786" elapsed="0.122730"/>
</kw>
<msg time="2026-08-15T23:56:28.746604" level="INFO">Repeating keyword, round 618/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.749338" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.749079" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.749031" elapsed="0.000457"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.750365" level="INFO">${current_Date} = 2026-08-15 23:56:28.750</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.750012" elapsed="0.000388"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.750908" level="INFO">${ellapsed_seconds} = 2601.587</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.750553" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.751281" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.751015" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.750993" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.748476" elapsed="0.002936"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.751952" level="INFO">${number} = 618</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.751560" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.753456" level="INFO">${number} = 618</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.753091" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.755543" level="INFO">${device-port} = 18447</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.754696" elapsed="0.000930"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.758206" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.796457" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.796687" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.758094" elapsed="0.038668"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.797749" elapsed="0.000099"/>
</kw>
<msg time="2026-08-15T23:56:28.797936" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.796982" elapsed="0.001066">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.796933" elapsed="0.001209">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.757761" elapsed="0.040670">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.757364" elapsed="0.041291"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.799562" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18447 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.872181" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.872422" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.799064" elapsed="0.073416"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.872599" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:56:28.873179" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.756932" elapsed="0.116398"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.874068" elapsed="0.001046"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.756105" elapsed="0.119241"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.754236" elapsed="0.121311"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.753648" elapsed="0.122008"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.752610" elapsed="0.123176"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.752152" elapsed="0.123847"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.877365" level="INFO">${next} = 18448</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.876408" elapsed="0.001022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.878973" level="INFO">${current_port} = 18448</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.877869" elapsed="0.001222"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.747129" elapsed="0.132146"/>
</kw>
<msg time="2026-08-15T23:56:28.879383" level="INFO">Repeating keyword, round 619/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:28.882358" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:28.882061" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.881988" elapsed="0.000507"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.882835" level="INFO">${current_Date} = 2026-08-15 23:56:28.883</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:28.882647" elapsed="0.000217"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:28.883401" level="INFO">${ellapsed_seconds} = 2601.454</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:28.883018" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.883760" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:28.883506" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:28.883486" elapsed="0.000375"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:28.881429" elapsed="0.002480"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.884501" level="INFO">${number} = 619</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.884074" elapsed="0.000456"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.886104" level="INFO">${number} = 619</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.885713" elapsed="0.000424"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.888276" level="INFO">${device-port} = 18448</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.887416" elapsed="0.000962"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.891085" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:28.923687" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.923965" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.890975" elapsed="0.033053"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:28.925455" elapsed="0.000183"/>
</kw>
<msg time="2026-08-15T23:56:28.925757" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:28.924200" elapsed="0.001872">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:28.924152" elapsed="0.002035">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:28.890667" elapsed="0.035835">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:28.890232" elapsed="0.036432"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:28.927637" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18448 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:28.992187" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:28.992440" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:28.927093" elapsed="0.065404"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:28.992675" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:56:28.993191" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:28.889754" elapsed="0.103548"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:28.993936" elapsed="0.000964"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:28.888865" elapsed="0.106234"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:28.886890" elapsed="0.108401"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:28.886302" elapsed="0.109096"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.885216" elapsed="0.110312"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:28.884691" elapsed="0.110935"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.996867" level="INFO">${next} = 18449</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:28.996019" elapsed="0.000913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:28.998207" level="INFO">${current_port} = 18449</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:28.997301" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.879870" elapsed="0.118567"/>
</kw>
<msg time="2026-08-15T23:56:28.998526" level="INFO">Repeating keyword, round 620/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.001237" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.000982" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.000936" elapsed="0.000409"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.001868" level="INFO">${current_Date} = 2026-08-15 23:56:29.002</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.001615" elapsed="0.000293"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.002566" level="INFO">${ellapsed_seconds} = 2601.335</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.002121" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.003070" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.002706" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.002679" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.000349" elapsed="0.002901"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.003992" level="INFO">${number} = 620</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.003457" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.006038" level="INFO">${number} = 620</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.005541" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.008852" level="INFO">${device-port} = 18449</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.007682" elapsed="0.001284"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.012697" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.043931" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.044152" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.012280" elapsed="0.031932"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.045157" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:29.045294" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.044404" elapsed="0.000997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.044356" elapsed="0.001137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.011889" elapsed="0.033884">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.011290" elapsed="0.034728"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.046888" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18449 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.111891" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.112138" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.046372" elapsed="0.065821"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.112306" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:29.112709" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.010685" elapsed="0.102174"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.113429" elapsed="0.000892"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.009580" elapsed="0.104932"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.007058" elapsed="0.107645"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.006298" elapsed="0.108547"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.004918" elapsed="0.110063"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.004248" elapsed="0.110831"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.116452" level="INFO">${next} = 18450</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.115430" elapsed="0.001086"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.117864" level="INFO">${current_port} = 18450</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.116930" elapsed="0.001036"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:28.999035" elapsed="0.119061"/>
</kw>
<msg time="2026-08-15T23:56:29.118187" level="INFO">Repeating keyword, round 621/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.120468" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.120350" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.120330" elapsed="0.000203"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.120853" level="INFO">${current_Date} = 2026-08-15 23:56:29.121</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.120678" elapsed="0.000203"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.121347" level="INFO">${ellapsed_seconds} = 2601.216</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.121032" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.121686" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.121444" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.121424" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.119986" elapsed="0.001840"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.122344" level="INFO">${number} = 621</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.121981" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.123772" level="INFO">${number} = 621</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.123434" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.125847" level="INFO">${device-port} = 18450</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.125057" elapsed="0.000873"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.128555" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.164305" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.164561" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.128448" elapsed="0.036173"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.165686" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:29.165859" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.164856" elapsed="0.001231">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.164762" elapsed="0.001427">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.128019" elapsed="0.038465">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.127583" elapsed="0.039046"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.167532" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18450 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.231859" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.232069" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.167024" elapsed="0.065100"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.232237" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:29.232656" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.127161" elapsed="0.105605"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.233373" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.126370" elapsed="0.108106"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.124580" elapsed="0.110086"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.124006" elapsed="0.110761"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.122984" elapsed="0.111966"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.122527" elapsed="0.112521"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.236244" level="INFO">${next} = 18451</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.235434" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.237579" level="INFO">${current_port} = 18451</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.236670" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.118613" elapsed="0.119253"/>
</kw>
<msg time="2026-08-15T23:56:29.237961" level="INFO">Repeating keyword, round 622/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.240500" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.240376" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.240352" elapsed="0.000212"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.240931" level="INFO">${current_Date} = 2026-08-15 23:56:29.241</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.240743" elapsed="0.000215"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.241439" level="INFO">${ellapsed_seconds} = 2601.096</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.241108" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.241783" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.241536" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.241518" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.239869" elapsed="0.002055"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.242432" level="INFO">${number} = 622</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.242069" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.243902" level="INFO">${number} = 622</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.243535" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.245903" level="INFO">${device-port} = 18451</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.245102" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.248620" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.287506" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.287727" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.248517" elapsed="0.039268"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.288690" elapsed="0.000054"/>
</kw>
<msg time="2026-08-15T23:56:29.288852" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.287988" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.287941" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.248100" elapsed="0.041233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.247683" elapsed="0.041851"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.290395" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18451 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.359751" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.360057" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.289912" elapsed="0.070204"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.360250" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:56:29.360856" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.247274" elapsed="0.113709"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.361593" elapsed="0.001013"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.246423" elapsed="0.116445"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.244622" elapsed="0.118454"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.244089" elapsed="0.119091"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.243078" elapsed="0.120227"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.242614" elapsed="0.120792"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.364627" level="INFO">${next} = 18452</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.363790" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.366084" level="INFO">${current_port} = 18452</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.365114" elapsed="0.001073"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.238392" elapsed="0.127930"/>
</kw>
<msg time="2026-08-15T23:56:29.366413" level="INFO">Repeating keyword, round 623/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.369226" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.368951" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.368898" elapsed="0.000477"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.370149" level="INFO">${current_Date} = 2026-08-15 23:56:29.370</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.369718" elapsed="0.000495"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.371361" level="INFO">${ellapsed_seconds} = 2600.967</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.370615" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.371723" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.371469" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.371450" elapsed="0.000369"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.368355" elapsed="0.003512"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.372409" level="INFO">${number} = 623</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.372035" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.373916" level="INFO">${number} = 623</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.373551" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.375999" level="INFO">${device-port} = 18452</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.375175" elapsed="0.000914"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.378950" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.411452" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.411676" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.378841" elapsed="0.032894"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.412683" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:29.412849" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.411938" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.411889" elapsed="0.001268">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.378527" elapsed="0.034912">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.377796" elapsed="0.035785"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.414477" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18452 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.484194" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.484408" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.413960" elapsed="0.070504"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.484622" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:29.485132" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.377372" elapsed="0.107877"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.485982" elapsed="0.000982"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.376541" elapsed="0.110647"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.374678" elapsed="0.112707"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.374118" elapsed="0.113368"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.373085" elapsed="0.114522"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.372601" elapsed="0.115101"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.489133" level="INFO">${next} = 18453</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.488181" elapsed="0.001017"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.490575" level="INFO">${current_port} = 18453</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.489563" elapsed="0.001113"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.366990" elapsed="0.123874"/>
</kw>
<msg time="2026-08-15T23:56:29.490959" level="INFO">Repeating keyword, round 624/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.493539" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.493291" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.493235" elapsed="0.000452"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.494434" level="INFO">${current_Date} = 2026-08-15 23:56:29.494</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.494192" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.494935" level="INFO">${ellapsed_seconds} = 2600.843</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.494612" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.495277" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.495033" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.495014" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.492687" elapsed="0.002718"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.495937" level="INFO">${number} = 624</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.495550" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.497412" level="INFO">${number} = 624</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.497053" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.499454" level="INFO">${device-port} = 18453</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.498618" elapsed="0.000920"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.502264" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.535667" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.535940" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.502152" elapsed="0.033851"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.536988" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:56:29.537138" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.536174" elapsed="0.001072">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.536127" elapsed="0.001212">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.501870" elapsed="0.035766">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.501262" elapsed="0.036674"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.538850" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18453 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.604026" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.604272" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.538314" elapsed="0.066015"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.604454" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:56:29.604942" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.500834" elapsed="0.104228"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.605713" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.500003" elapsed="0.106887"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.498154" elapsed="0.108938"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.497599" elapsed="0.109594"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.496582" elapsed="0.110737"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.496119" elapsed="0.111320"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.608610" level="INFO">${next} = 18454</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.607837" elapsed="0.000833"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.610060" level="INFO">${current_port} = 18454</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.609085" elapsed="0.001075"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.491401" elapsed="0.118888"/>
</kw>
<msg time="2026-08-15T23:56:29.610374" level="INFO">Repeating keyword, round 625/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.613019" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.612716" elapsed="0.000399"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.612671" elapsed="0.000517"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.613922" level="INFO">${current_Date} = 2026-08-15 23:56:29.614</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.613526" elapsed="0.000470"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.615073" level="INFO">${ellapsed_seconds} = 2600.723</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.614335" elapsed="0.000799"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.615872" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.615294" elapsed="0.000704"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.615251" elapsed="0.000805"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.612179" elapsed="0.003997"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.617460" level="INFO">${number} = 625</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.616513" elapsed="0.001008"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.619881" level="INFO">${number} = 625</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.619376" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.622679" level="INFO">${device-port} = 18454</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.621620" elapsed="0.001140"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.625509" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.655779" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.656039" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.625403" elapsed="0.030698"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.657053" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:29.657193" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.656280" elapsed="0.001116">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.656232" elapsed="0.001265">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.625117" elapsed="0.032652">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.624487" elapsed="0.033459"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.658767" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18454 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.723558" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.723771" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.658290" elapsed="0.065580"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.723982" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:29.724406" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.624065" elapsed="0.100462"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.725184" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.623237" elapsed="0.103064"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.620923" elapsed="0.105582"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.620140" elapsed="0.106494"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.618707" elapsed="0.108056"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.617905" elapsed="0.109009"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.728071" level="INFO">${next} = 18455</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.727264" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.729456" level="INFO">${current_port} = 18455</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.728489" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.610871" elapsed="0.118731"/>
</kw>
<msg time="2026-08-15T23:56:29.729656" level="INFO">Repeating keyword, round 626/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.731236" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.731078" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.731051" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.731788" level="INFO">${current_Date} = 2026-08-15 23:56:29.732</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.731574" elapsed="0.000272"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.732477" level="INFO">${ellapsed_seconds} = 2600.605</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.732058" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.732982" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.732631" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.732603" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.730722" elapsed="0.002437"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.733925" level="INFO">${number} = 626</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.733383" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.735944" level="INFO">${number} = 626</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.735449" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.738724" level="INFO">${device-port} = 18455</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.737625" elapsed="0.001243"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.745725" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.776211" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.776501" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.745572" elapsed="0.030999"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.777582" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:29.777728" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.776763" elapsed="0.001110">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.776709" elapsed="0.001266">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.745149" elapsed="0.033118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.741246" elapsed="0.037274"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.779427" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18455 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.848236" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.848456" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.778920" elapsed="0.069590"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.848624" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:29.849126" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.740602" elapsed="0.108650"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.849884" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.739475" elapsed="0.111564"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.737000" elapsed="0.114235"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.736210" elapsed="0.115130"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.734825" elapsed="0.116641"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.734180" elapsed="0.117384"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.852784" level="INFO">${next} = 18456</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.851969" elapsed="0.000931"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.854223" level="INFO">${current_port} = 18456</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.853284" elapsed="0.001040"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.729958" elapsed="0.124500"/>
</kw>
<msg time="2026-08-15T23:56:29.854546" level="INFO">Repeating keyword, round 627/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.857263" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.856991" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.856948" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.858151" level="INFO">${current_Date} = 2026-08-15 23:56:29.858</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.857740" elapsed="0.000475"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.859320" level="INFO">${ellapsed_seconds} = 2600.479</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.858551" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.860198" elapsed="0.000072"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.859539" elapsed="0.000783"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.859497" elapsed="0.000856"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.856413" elapsed="0.003992"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.860937" level="INFO">${number} = 627</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.860551" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.862405" level="INFO">${number} = 627</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.862051" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.864469" level="INFO">${device-port} = 18456</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.863628" elapsed="0.000923"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.867241" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:29.900087" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.900306" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.867140" elapsed="0.033224"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.901278" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:29.901410" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:29.900528" elapsed="0.001066">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:29.900481" elapsed="0.001210">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.866656" elapsed="0.035339">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.866259" elapsed="0.035879"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.902987" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18456 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:29.978126" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:29.978339" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.902482" elapsed="0.075913"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:29.978507" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:29.978976" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.865839" elapsed="0.113252"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:29.979785" elapsed="0.000954"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.865019" elapsed="0.115980"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.863149" elapsed="0.118046"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.862593" elapsed="0.118706"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.861586" elapsed="0.119840"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.861119" elapsed="0.120405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.982692" level="INFO">${next} = 18457</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.981929" elapsed="0.000824"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.984173" level="INFO">${current_port} = 18457</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:29.983177" elapsed="0.001101"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.855050" elapsed="0.129367"/>
</kw>
<msg time="2026-08-15T23:56:29.984508" level="INFO">Repeating keyword, round 628/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:29.987308" elapsed="0.000089"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:29.987031" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.986986" elapsed="0.000530"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.988291" level="INFO">${current_Date} = 2026-08-15 23:56:29.988</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:29.987984" elapsed="0.000335"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:29.988847" level="INFO">${ellapsed_seconds} = 2600.349</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:29.988472" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:29.989220" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:29.988951" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:29.988933" elapsed="0.000376"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:29.986448" elapsed="0.002909"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.989966" level="INFO">${number} = 628</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.989546" elapsed="0.000449"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.991633" level="INFO">${number} = 628</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.991260" elapsed="0.000401"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:29.993673" level="INFO">${device-port} = 18457</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:29.992873" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:29.996499" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.024249" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.024475" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:29.996213" elapsed="0.028320"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.025444" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:30.025577" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.024695" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.024651" elapsed="0.001122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:29.995924" elapsed="0.030160">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:29.995502" elapsed="0.030791"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.027197" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18457 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.100086" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.100312" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.026639" elapsed="0.073731"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.100485" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:30.100945" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:29.995038" elapsed="0.106023"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.101630" elapsed="0.000913"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:29.994224" elapsed="0.108515"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:29.992396" elapsed="0.110616"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:29.991843" elapsed="0.111272"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.990780" elapsed="0.112461"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:29.990174" elapsed="0.113165"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.104504" level="INFO">${next} = 18458</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.103694" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.105908" level="INFO">${current_port} = 18458</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.104974" elapsed="0.001033"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:29.985042" elapsed="0.121094"/>
</kw>
<msg time="2026-08-15T23:56:30.106221" level="INFO">Repeating keyword, round 629/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.108197" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.108044" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.108017" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.108701" level="INFO">${current_Date} = 2026-08-15 23:56:30.109</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.108488" elapsed="0.000250"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.109392" level="INFO">${ellapsed_seconds} = 2600.228</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.108965" elapsed="0.000464"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.109882" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.109527" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.109501" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.107685" elapsed="0.002373"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.110789" level="INFO">${number} = 629</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.110262" elapsed="0.000586"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.112827" level="INFO">${number} = 629</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.112337" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.115608" level="INFO">${device-port} = 18458</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.114480" elapsed="0.001241"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.119327" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.151886" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.152111" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.119162" elapsed="0.033010"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.153081" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:30.153216" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.152337" elapsed="0.001061">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.152292" elapsed="0.001206">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.118630" elapsed="0.035141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.118090" elapsed="0.035861"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.154870" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18458 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.219652" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.219912" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.154304" elapsed="0.065667"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.220088" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:30.220512" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.117478" elapsed="0.103145"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.221241" elapsed="0.000944"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.116360" elapsed="0.106027"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.113845" elapsed="0.108731"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.113096" elapsed="0.109581"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.111695" elapsed="0.111149"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.111066" elapsed="0.111883"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.224096" level="INFO">${next} = 18459</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.223297" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.225420" level="INFO">${current_port} = 18459</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.224519" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.106641" elapsed="0.119004"/>
</kw>
<msg time="2026-08-15T23:56:30.225729" level="INFO">Repeating keyword, round 630/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.228351" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.228102" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.228057" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.229295" level="INFO">${current_Date} = 2026-08-15 23:56:30.229</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.228937" elapsed="0.000419"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.230475" level="INFO">${ellapsed_seconds} = 2600.108</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.229695" elapsed="0.000841"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.231279" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.230696" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.230655" elapsed="0.000742"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.227533" elapsed="0.003914"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.231983" level="INFO">${number} = 630</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.231594" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.233435" level="INFO">${number} = 630</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.233081" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.235445" level="INFO">${device-port} = 18459</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.234634" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.237999" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.271743" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.271999" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.237897" elapsed="0.034163"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.272967" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:30.273103" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.272225" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.272180" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.237597" elapsed="0.036016">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.237203" elapsed="0.036666"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.274742" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18459 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.340073" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.340302" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.274256" elapsed="0.066105"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.340505" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:30.340977" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.236770" elapsed="0.104321"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.341691" elapsed="0.001101"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.235985" elapsed="0.107211"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.234180" elapsed="0.109230"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.233623" elapsed="0.109890"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.232613" elapsed="0.111027"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.232167" elapsed="0.111571"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.344990" level="INFO">${next} = 18460</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.344171" elapsed="0.000880"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.346394" level="INFO">${current_port} = 18460</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.345420" elapsed="0.001075"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.226252" elapsed="0.120373"/>
</kw>
<msg time="2026-08-15T23:56:30.346711" level="INFO">Repeating keyword, round 631/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.349292" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.349043" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.348999" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.350222" level="INFO">${current_Date} = 2026-08-15 23:56:30.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.349856" elapsed="0.000408"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.350750" level="INFO">${ellapsed_seconds} = 2599.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.350427" elapsed="0.000349"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.351106" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.350865" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.350844" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.348470" elapsed="0.002762"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.351745" level="INFO">${number} = 631</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.351379" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.353275" level="INFO">${number} = 631</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.352923" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.355281" level="INFO">${device-port} = 18460</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.354488" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.357858" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.391536" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.391761" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.357728" elapsed="0.034130"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.392746" elapsed="0.000086"/>
</kw>
<msg time="2026-08-15T23:56:30.392915" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.392030" elapsed="0.001079">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.391982" elapsed="0.001228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.357434" elapsed="0.036080">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.357043" elapsed="0.036615"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.394537" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18460 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.469856" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.470124" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.394046" elapsed="0.076136"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.470317" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:56:30.470888" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.356604" elapsed="0.114408"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.471619" elapsed="0.001013"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.355821" elapsed="0.117091"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.354039" elapsed="0.119118"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.353463" elapsed="0.119803"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.352435" elapsed="0.120965"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.351946" elapsed="0.121557"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.474715" level="INFO">${next} = 18461</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.473923" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.476182" level="INFO">${current_port} = 18461</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.475221" elapsed="0.001063"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.347183" elapsed="0.129239"/>
</kw>
<msg time="2026-08-15T23:56:30.476511" level="INFO">Repeating keyword, round 632/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.478244" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.478127" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.478106" elapsed="0.000208"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.478691" level="INFO">${current_Date} = 2026-08-15 23:56:30.479</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.478516" elapsed="0.000203"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.479243" level="INFO">${ellapsed_seconds} = 2599.858</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.478899" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.479599" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.479345" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.479325" elapsed="0.000357"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.477872" elapsed="0.001857"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.480292" level="INFO">${number} = 632</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.479907" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.481896" level="INFO">${number} = 632</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.481510" elapsed="0.000433"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.484039" level="INFO">${device-port} = 18461</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.483215" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.486858" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.523932" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.524160" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.486558" elapsed="0.037662"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.525223" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:30.525366" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.524391" elapsed="0.001084">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.524342" elapsed="0.001245">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.486274" elapsed="0.039647">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.485851" elapsed="0.040294"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.527053" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18461 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.592045" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.592259" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.526504" elapsed="0.065810"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.592466" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:30.592946" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.485411" elapsed="0.107650"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.593643" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.484569" elapsed="0.110197"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.482697" elapsed="0.112305"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.482151" elapsed="0.112954"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.481050" elapsed="0.114180"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.480480" elapsed="0.114851"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.596602" level="INFO">${next} = 18462</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.595715" elapsed="0.000956"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.598036" level="INFO">${current_port} = 18462</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.597096" elapsed="0.001041"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.477076" elapsed="0.121193"/>
</kw>
<msg time="2026-08-15T23:56:30.598357" level="INFO">Repeating keyword, round 633/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.601094" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.600838" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.600756" elapsed="0.000496"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.601701" level="INFO">${current_Date} = 2026-08-15 23:56:30.602</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.601482" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.602420" level="INFO">${ellapsed_seconds} = 2599.735</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.601984" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.602928" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.602557" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.602530" elapsed="0.000515"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.600176" elapsed="0.002934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.603867" level="INFO">${number} = 633</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.603315" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.605964" level="INFO">${number} = 633</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.605451" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.608898" level="INFO">${device-port} = 18462</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.607644" elapsed="0.001377"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.613135" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.644157" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.644394" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.612606" elapsed="0.031852"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.645406" elapsed="0.000072"/>
</kw>
<msg time="2026-08-15T23:56:30.645562" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.644629" elapsed="0.001148">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.644581" elapsed="0.001336">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.612145" elapsed="0.034066">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.611470" elapsed="0.034887"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.647251" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18462 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.712127" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.712344" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.646724" elapsed="0.065723"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.712584" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:30.713052" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.610854" elapsed="0.102309"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.713776" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.609656" elapsed="0.105288"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.606998" elapsed="0.108143"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.606225" elapsed="0.109018"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.604784" elapsed="0.110583"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.604127" elapsed="0.111338"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.716721" level="INFO">${next} = 18463</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.715911" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.718147" level="INFO">${current_port} = 18463</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.717210" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.598879" elapsed="0.119501"/>
</kw>
<msg time="2026-08-15T23:56:30.718470" level="INFO">Repeating keyword, round 634/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.720783" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.720615" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.720589" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.721382" level="INFO">${current_Date} = 2026-08-15 23:56:30.721</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.721152" elapsed="0.000266"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.722124" level="INFO">${ellapsed_seconds} = 2599.616</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.721630" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.722600" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.722262" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.722235" elapsed="0.000495"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.720281" elapsed="0.002515"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.723555" level="INFO">${number} = 634</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.723037" elapsed="0.000556"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.725636" level="INFO">${number} = 634</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.725163" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.728532" level="INFO">${device-port} = 18463</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.727361" elapsed="0.001283"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.732510" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.767935" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.768158" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.732204" elapsed="0.036014"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.769163" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:30.769305" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.768404" elapsed="0.001018">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.768354" elapsed="0.001162">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.731647" elapsed="0.038137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.731096" elapsed="0.038936"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.770931" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18463 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.836027" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.836271" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.770399" elapsed="0.065928"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.836451" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:56:30.836952" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.730474" elapsed="0.106591"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.837664" elapsed="0.000942"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.729313" elapsed="0.109533"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.726681" elapsed="0.112371"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.725929" elapsed="0.113229"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.724493" elapsed="0.114980"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.723857" elapsed="0.115838"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.841032" level="INFO">${next} = 18464</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.840138" elapsed="0.000955"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.842471" level="INFO">${current_port} = 18464</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.841463" elapsed="0.001104"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.718968" elapsed="0.123746"/>
</kw>
<msg time="2026-08-15T23:56:30.842853" level="INFO">Repeating keyword, round 635/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.844932" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.844815" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.844778" elapsed="0.000218"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.845314" level="INFO">${current_Date} = 2026-08-15 23:56:30.845</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.845148" elapsed="0.000193"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.845838" level="INFO">${ellapsed_seconds} = 2599.492</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.845489" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.846184" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.845938" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.845918" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.844536" elapsed="0.001776"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.846855" level="INFO">${number} = 635</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.846457" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.848326" level="INFO">${number} = 635</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.847978" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.850362" level="INFO">${device-port} = 18464</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.849529" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.853162" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:30.888337" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.888555" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.853054" elapsed="0.035560"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.889561" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:30.889700" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:30.888779" elapsed="0.001171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:30.888732" elapsed="0.001322">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.852589" elapsed="0.037765">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.852189" elapsed="0.038315"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.891421" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18464 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:30.955937" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:30.956159" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.890886" elapsed="0.065343"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:30.956340" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:30.956740" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.851732" elapsed="0.105167"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:30.957497" elapsed="0.000913"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.850924" elapsed="0.107675"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.849073" elapsed="0.109804"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.848512" elapsed="0.110473"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.847506" elapsed="0.111614"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.847039" elapsed="0.112185"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.960398" level="INFO">${next} = 18465</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.959585" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.961775" level="INFO">${current_port} = 18465</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:30.960871" elapsed="0.001073"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.843376" elapsed="0.118697"/>
</kw>
<msg time="2026-08-15T23:56:30.962161" level="INFO">Repeating keyword, round 636/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:30.964443" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:30.964266" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.964238" elapsed="0.000298"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.965053" level="INFO">${current_Date} = 2026-08-15 23:56:30.965</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:30.964828" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:30.965734" level="INFO">${ellapsed_seconds} = 2599.372</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:30.965301" elapsed="0.000471"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:30.966236" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:30.965898" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:30.965871" elapsed="0.000478"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:30.963833" elapsed="0.002586"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.967233" level="INFO">${number} = 636</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.966630" elapsed="0.000642"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.969312" level="INFO">${number} = 636</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.968828" elapsed="0.000521"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:30.972165" level="INFO">${device-port} = 18465</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:30.971048" elapsed="0.001236"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:30.976211" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.007661" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.007924" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:30.976066" elapsed="0.031933"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.008906" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:31.009062" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.008171" elapsed="0.000999">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.008123" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:30.975514" elapsed="0.034018">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:30.974677" elapsed="0.035063"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.010706" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18465 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.086419" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.086639" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.010149" elapsed="0.076547"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.086855" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:31.087294" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:30.974083" elapsed="0.113322"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.088022" elapsed="0.000933"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:30.972951" elapsed="0.116216"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:30.970341" elapsed="0.119028"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:30.969585" elapsed="0.119888"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.968158" elapsed="0.121439"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:30.967508" elapsed="0.122186"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.091039" level="INFO">${next} = 18466</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.090100" elapsed="0.001000"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.092412" level="INFO">${current_port} = 18466</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.091494" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:30.962630" elapsed="0.130011"/>
</kw>
<msg time="2026-08-15T23:56:31.092727" level="INFO">Repeating keyword, round 637/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.095513" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.095251" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.095192" elapsed="0.000467"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.096396" level="INFO">${current_Date} = 2026-08-15 23:56:31.096</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.096029" elapsed="0.000431"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.097545" level="INFO">${ellapsed_seconds} = 2599.241</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.096794" elapsed="0.000811"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.098496" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.097766" elapsed="0.000865"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.097723" elapsed="0.000983"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.094664" elapsed="0.004182"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.099667" level="INFO">${number} = 637</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.099188" elapsed="0.000506"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.101131" level="INFO">${number} = 637</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.100775" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.103205" level="INFO">${device-port} = 18466</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.102379" elapsed="0.000910"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.106161" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.132606" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.132871" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.106033" elapsed="0.026906"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.133845" elapsed="0.000071"/>
</kw>
<msg time="2026-08-15T23:56:31.134028" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.133107" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.133061" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.105730" elapsed="0.028878">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.105136" elapsed="0.029613"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.135631" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18466 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.204528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.204738" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.135147" elapsed="0.069646"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.204941" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:31.205366" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.104673" elapsed="0.100805"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.206172" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.103852" elapsed="0.103432"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.101882" elapsed="0.105599"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.101317" elapsed="0.106266"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.100315" elapsed="0.107394"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.099868" elapsed="0.107978"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.209024" level="INFO">${next} = 18467</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.208215" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.210452" level="INFO">${current_port} = 18467</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.209464" elapsed="0.001087"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.093335" elapsed="0.117347"/>
</kw>
<msg time="2026-08-15T23:56:31.210769" level="INFO">Repeating keyword, round 638/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.213401" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.213142" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.213100" elapsed="0.000449"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.214378" level="INFO">${current_Date} = 2026-08-15 23:56:31.214</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.214057" elapsed="0.000349"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.214886" level="INFO">${ellapsed_seconds} = 2599.123</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.214558" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.215219" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.214984" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.214966" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.212570" elapsed="0.002778"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.215893" level="INFO">${number} = 638</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.215505" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.217352" level="INFO">${number} = 638</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.217011" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.219409" level="INFO">${device-port} = 18467</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.218587" elapsed="0.000916"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.224588" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.260796" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.261080" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.224477" elapsed="0.036677"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.262214" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:31.262360" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.261358" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.261300" elapsed="0.001265">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.224177" elapsed="0.038838">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.221234" elapsed="0.042034"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.264186" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18467 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.332425" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.332637" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.263640" elapsed="0.069051"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.332842" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:31.333403" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.220791" elapsed="0.112746"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.334185" elapsed="0.000993"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.219975" elapsed="0.115412"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.218118" elapsed="0.117463"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.217553" elapsed="0.118134"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.216545" elapsed="0.119329"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.216084" elapsed="0.119911"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.337288" level="INFO">${next} = 18468</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.336379" elapsed="0.000972"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.338653" level="INFO">${current_port} = 18468</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.337730" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.211276" elapsed="0.127668"/>
</kw>
<msg time="2026-08-15T23:56:31.339038" level="INFO">Repeating keyword, round 639/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.341781" elapsed="0.000073"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.341472" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.341428" elapsed="0.000672"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.342633" level="INFO">${current_Date} = 2026-08-15 23:56:31.343</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.342390" elapsed="0.000299"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.343407" level="INFO">${ellapsed_seconds} = 2598.994</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.342950" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.343910" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.343544" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.343517" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.340869" elapsed="0.003235"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.344890" level="INFO">${number} = 639</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.344316" elapsed="0.000614"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.346980" level="INFO">${number} = 639</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.346469" elapsed="0.000549"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.349957" level="INFO">${device-port} = 18468</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.348754" elapsed="0.001316"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.354095" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.388242" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.388466" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.353932" elapsed="0.034593"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.389504" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:56:31.389660" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.388696" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.388647" elapsed="0.001365">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.353129" elapsed="0.037188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.352452" elapsed="0.038040"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.391492" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18468 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.455580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.455857" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.390959" elapsed="0.064958"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.456068" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:56:31.456531" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.351838" elapsed="0.104835"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.457312" elapsed="0.000966"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.350684" elapsed="0.107791"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.348062" elapsed="0.110609"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.347246" elapsed="0.111530"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.345831" elapsed="0.113153"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.345172" elapsed="0.113915"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.460295" level="INFO">${next} = 18469</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.459442" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.461706" level="INFO">${current_port} = 18469</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.460777" elapsed="0.001086"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.339483" elapsed="0.122519"/>
</kw>
<msg time="2026-08-15T23:56:31.462094" level="INFO">Repeating keyword, round 640/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.464782" elapsed="0.000075"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.464459" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.464414" elapsed="0.000571"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.465511" level="INFO">${current_Date} = 2026-08-15 23:56:31.465</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.465325" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.466069" level="INFO">${ellapsed_seconds} = 2598.872</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.465697" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.466444" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.466180" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.466155" elapsed="0.000379"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.463883" elapsed="0.002698"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.467294" level="INFO">${number} = 640</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.466747" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.468790" level="INFO">${number} = 640</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.468421" elapsed="0.000413"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.470842" level="INFO">${device-port} = 18469</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.470027" elapsed="0.000899"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.473699" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.507523" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.507749" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.473419" elapsed="0.034428"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.508830" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:31.508977" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.508040" elapsed="0.001045">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.507979" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.473138" elapsed="0.036328">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.472678" elapsed="0.037010"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.510567" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18469 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.576311" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.576576" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.510076" elapsed="0.066561"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.576772" elapsed="0.000140"/>
</return>
<msg time="2026-08-15T23:56:31.577289" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.472234" elapsed="0.105166"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.578064" elapsed="0.000985"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.471379" elapsed="0.107870"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.469539" elapsed="0.109907"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.469001" elapsed="0.110560"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.467952" elapsed="0.111779"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.467480" elapsed="0.112424"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.581365" level="INFO">${next} = 18470</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.580475" elapsed="0.000951"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.582753" level="INFO">${current_port} = 18470</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.581796" elapsed="0.001121"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.462548" elapsed="0.120503"/>
</kw>
<msg time="2026-08-15T23:56:31.583142" level="INFO">Repeating keyword, round 641/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.585772" elapsed="0.000064"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.585522" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.585477" elapsed="0.000474"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.586637" level="INFO">${current_Date} = 2026-08-15 23:56:31.586</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.586283" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.587770" level="INFO">${ellapsed_seconds} = 2598.751</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.587063" elapsed="0.000797"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.588620" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.588069" elapsed="0.000676"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.587981" elapsed="0.000849"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.584981" elapsed="0.003956"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.589628" level="INFO">${number} = 641</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.589258" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.591128" level="INFO">${number} = 641</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.590721" elapsed="0.000435"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.593199" level="INFO">${device-port} = 18470</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.592395" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.595847" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.627917" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.628144" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.595701" elapsed="0.032503"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.629125" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:31.629262" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.628374" elapsed="0.001091">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.628327" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.595366" elapsed="0.034507">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.594973" elapsed="0.035049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.630887" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18470 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.696200" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.696509" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.630372" elapsed="0.066196"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.696710" elapsed="0.000139"/>
</return>
<msg time="2026-08-15T23:56:31.697239" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.594534" elapsed="0.102819"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.698014" elapsed="0.000962"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.593718" elapsed="0.105451"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.591918" elapsed="0.107448"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.591319" elapsed="0.108151"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.590277" elapsed="0.109343"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.589826" elapsed="0.109897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.700942" level="INFO">${next} = 18471</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.700121" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.702362" level="INFO">${current_port} = 18471</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.701368" elapsed="0.001091"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.583593" elapsed="0.118999"/>
</kw>
<msg time="2026-08-15T23:56:31.702680" level="INFO">Repeating keyword, round 642/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.705337" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.705091" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.705046" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.706368" level="INFO">${current_Date} = 2026-08-15 23:56:31.706</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.706000" elapsed="0.000430"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.707499" level="INFO">${ellapsed_seconds} = 2598.631</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.706770" elapsed="0.000789"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.708348" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.707767" elapsed="0.000650"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.707724" elapsed="0.000723"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.704517" elapsed="0.003975"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.709024" level="INFO">${number} = 642</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.708638" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.710469" level="INFO">${number} = 642</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.710124" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.712526" level="INFO">${device-port} = 18471</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.711689" elapsed="0.000919"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.715095" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.751840" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.752072" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.714992" elapsed="0.037141"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.753048" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:31.753185" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.752299" elapsed="0.000992">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.752253" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.714689" elapsed="0.038978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.714298" elapsed="0.039615"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.754750" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18471 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.820329" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.820578" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.754264" elapsed="0.066376"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.820769" elapsed="0.000125"/>
</return>
<msg time="2026-08-15T23:56:31.821268" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.713883" elapsed="0.107503"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.822049" elapsed="0.000968"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.713072" elapsed="0.110186"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.711208" elapsed="0.112257"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.710657" elapsed="0.112918"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.709660" elapsed="0.114053"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.709210" elapsed="0.114653"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.825101" level="INFO">${next} = 18472</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.824243" elapsed="0.000923"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.826526" level="INFO">${current_port} = 18472</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.825554" elapsed="0.001074"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.703188" elapsed="0.123577"/>
</kw>
<msg time="2026-08-15T23:56:31.826922" level="INFO">Repeating keyword, round 643/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.829087" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.828930" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.828901" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.829611" level="INFO">${current_Date} = 2026-08-15 23:56:31.829</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.829388" elapsed="0.000262"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.830325" level="INFO">${ellapsed_seconds} = 2598.508</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.829882" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.830817" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.830461" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.830435" elapsed="0.000496"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.828569" elapsed="0.002428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.831734" level="INFO">${number} = 643</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.831221" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.833778" level="INFO">${number} = 643</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.833307" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.836619" level="INFO">${device-port} = 18472</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.835497" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.840278" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.872412" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.872674" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.840148" elapsed="0.032588"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.873745" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:31.873919" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.872971" elapsed="0.001178">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.872914" elapsed="0.001338">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.839656" elapsed="0.034887">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.839108" elapsed="0.035582"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.875613" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18472 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:31.940010" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.940228" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.875107" elapsed="0.065176"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:31.940399" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:31.940892" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.838474" elapsed="0.102536"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:31.941577" elapsed="0.000941"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.837367" elapsed="0.105391"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.834827" elapsed="0.108180"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.834069" elapsed="0.109044"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.832653" elapsed="0.110589"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.832017" elapsed="0.111322"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.944517" level="INFO">${next} = 18473</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.943693" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.945932" level="INFO">${current_port} = 18473</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:31.944993" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.827441" elapsed="0.118723"/>
</kw>
<msg time="2026-08-15T23:56:31.946251" level="INFO">Repeating keyword, round 644/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:31.949100" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:31.948843" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.948769" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.950061" level="INFO">${current_Date} = 2026-08-15 23:56:31.950</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:31.949660" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:31.951360" level="INFO">${ellapsed_seconds} = 2598.387</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:31.950460" elapsed="0.000935"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.951734" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:31.951477" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:31.951458" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:31.948214" elapsed="0.003663"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.952406" level="INFO">${number} = 644</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.952031" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.953866" level="INFO">${number} = 644</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.953508" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:31.955872" level="INFO">${device-port} = 18473</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:31.955071" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.958413" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:31.991410" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:31.991516" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.958306" elapsed="0.033237"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:31.991975" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:56:31.992037" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:31.991620" elapsed="0.000467">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:31.991598" elapsed="0.000532">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:31.958029" elapsed="0.034233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:31.957610" elapsed="0.034759"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:31.992749" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18473 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.059391" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.059489" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:31.992529" elapsed="0.066985"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.059565" elapsed="0.000035"/>
</return>
<msg time="2026-08-15T23:56:32.059754" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:31.957196" elapsed="0.102629"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.060080" elapsed="0.000398"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:31.956392" elapsed="0.104171"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:31.954580" elapsed="0.106068"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:31.954052" elapsed="0.106643"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.953062" elapsed="0.107690"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:31.952589" elapsed="0.108225"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.061319" level="INFO">${next} = 18474</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.060975" elapsed="0.000371"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.062088" level="INFO">${current_port} = 18474</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.061516" elapsed="0.000616"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:31.946725" elapsed="0.115478"/>
</kw>
<msg time="2026-08-15T23:56:32.062247" level="INFO">Repeating keyword, round 645/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.063407" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.063290" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.063270" elapsed="0.000204"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.063821" level="INFO">${current_Date} = 2026-08-15 23:56:32.064</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.063625" elapsed="0.000225"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.064324" level="INFO">${ellapsed_seconds} = 2598.273</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.064001" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.064675" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.064422" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.064403" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.063039" elapsed="0.001796"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.065361" level="INFO">${number} = 645</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.064986" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.067034" level="INFO">${number} = 645</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.066669" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.069019" level="INFO">${device-port} = 18474</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.068221" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.071783" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.111941" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.112169" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.071498" elapsed="0.040730"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.113173" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:32.113311" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.112395" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.112348" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.071217" elapsed="0.042720">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.070826" elapsed="0.043292"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.114995" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18474 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.180033" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.180246" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.114473" elapsed="0.065828"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.180412" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:32.180861" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.070388" elapsed="0.110587"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.181535" elapsed="0.000942"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.069536" elapsed="0.113130"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.067749" elapsed="0.115145"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.067219" elapsed="0.115778"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.066015" elapsed="0.117105"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.065545" elapsed="0.117669"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.184350" level="INFO">${next} = 18475</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.183562" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.185671" level="INFO">${current_port} = 18475</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.184769" elapsed="0.001194"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.062443" elapsed="0.123668"/>
</kw>
<msg time="2026-08-15T23:56:32.186202" level="INFO">Repeating keyword, round 646/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.187783" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.187628" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.187600" elapsed="0.000294"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.188373" level="INFO">${current_Date} = 2026-08-15 23:56:32.188</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.188149" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.189074" level="INFO">${ellapsed_seconds} = 2598.149</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.188619" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.189541" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.189210" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.189184" elapsed="0.000469"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.187296" elapsed="0.002451"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.190623" level="INFO">${number} = 646</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.190046" elapsed="0.000615"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.192642" level="INFO">${number} = 646</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.192171" elapsed="0.000508"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.195450" level="INFO">${device-port} = 18475</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.194351" elapsed="0.001211"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.199401" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.231936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.232167" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.199058" elapsed="0.033167"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.233136" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:32.233272" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.232391" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.232345" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.198470" elapsed="0.035373">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.197931" elapsed="0.036159"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.234977" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18475 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.300315" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.300560" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.234445" elapsed="0.066172"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.300741" elapsed="0.000128"/>
</return>
<msg time="2026-08-15T23:56:32.301232" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.197306" elapsed="0.104082"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.302097" elapsed="0.001050"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.196204" elapsed="0.107136"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.193647" elapsed="0.109888"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.192921" elapsed="0.110716"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.191525" elapsed="0.112235"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.190902" elapsed="0.113006"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.305111" level="INFO">${next} = 18476</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.304269" elapsed="0.000901"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.306509" level="INFO">${current_port} = 18476</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.305566" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.186489" elapsed="0.120242"/>
</kw>
<msg time="2026-08-15T23:56:32.306878" level="INFO">Repeating keyword, round 647/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.309699" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.309446" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.309401" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.310431" level="INFO">${current_Date} = 2026-08-15 23:56:32.310</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.310208" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.310993" level="INFO">${ellapsed_seconds} = 2598.027</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.310640" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.311341" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.311089" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.311071" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.308831" elapsed="0.002633"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.312001" level="INFO">${number} = 647</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.311615" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.313473" level="INFO">${number} = 647</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.313107" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.315529" level="INFO">${device-port} = 18476</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.314697" elapsed="0.000915"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.318333" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.352089" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.352311" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.318228" elapsed="0.034141"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.353323" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:32.353459" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.352534" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.352487" elapsed="0.001270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.317758" elapsed="0.036316">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.317361" elapsed="0.036862"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.355151" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18476 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.420276" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.420504" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.354595" elapsed="0.065963"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.420674" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:32.421179" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.316903" elapsed="0.104387"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.421901" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.316079" elapsed="0.106943"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.314212" elapsed="0.108999"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.313664" elapsed="0.109650"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.312633" elapsed="0.110805"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.312181" elapsed="0.111353"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.424674" level="INFO">${next} = 18477</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.423924" elapsed="0.000810"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.426105" level="INFO">${current_port} = 18477</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.425171" elapsed="0.001032"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.307340" elapsed="0.118992"/>
</kw>
<msg time="2026-08-15T23:56:32.426419" level="INFO">Repeating keyword, round 648/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.429105" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.428752" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.428708" elapsed="0.000551"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.429690" level="INFO">${current_Date} = 2026-08-15 23:56:32.430</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.429524" elapsed="0.000193"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.430204" level="INFO">${ellapsed_seconds} = 2597.907</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.429884" elapsed="0.000346"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.430552" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.430300" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.430282" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.428217" elapsed="0.002460"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.431211" level="INFO">${number} = 648</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.430847" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.432659" level="INFO">${number} = 648</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.432313" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.434694" level="INFO">${device-port} = 18477</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.433911" elapsed="0.000864"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.437439" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.471412" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.471634" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.437340" elapsed="0.034352"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.472629" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:32.472767" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.471897" elapsed="0.001007">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.471848" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.437061" elapsed="0.036215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.436450" elapsed="0.037034"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.474343" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18477 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.539820" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.540046" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.473863" elapsed="0.066239"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.540220" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:32.540682" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.436036" elapsed="0.104753"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.541412" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.435236" elapsed="0.107284"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.433441" elapsed="0.109268"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.432904" elapsed="0.109949"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.431864" elapsed="0.111121"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.431393" elapsed="0.111691"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.544227" level="INFO">${next} = 18478</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.543431" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.545601" level="INFO">${current_port} = 18478</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.544687" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.426935" elapsed="0.118955"/>
</kw>
<msg time="2026-08-15T23:56:32.545984" level="INFO">Repeating keyword, round 649/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.548596" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.548282" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.548240" elapsed="0.000500"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.549418" level="INFO">${current_Date} = 2026-08-15 23:56:32.549</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.549094" elapsed="0.000356"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.549995" level="INFO">${ellapsed_seconds} = 2597.788</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.549600" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.550347" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.550101" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.550081" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.547722" elapsed="0.002748"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.551083" level="INFO">${number} = 649</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.550615" elapsed="0.000495"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.552550" level="INFO">${number} = 649</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.552189" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.554516" level="INFO">${device-port} = 18478</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.553719" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.557304" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.592274" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.592509" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.557206" elapsed="0.035364"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.593500" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:32.593637" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.592738" elapsed="0.001122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.592692" elapsed="0.001269">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.556931" elapsed="0.037307">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.556320" elapsed="0.038061"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.595249" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18478 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.664504" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.664730" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.594733" elapsed="0.070053"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.664941" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:32.665348" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.555877" elapsed="0.109590"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.666074" elapsed="0.000895"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.555071" elapsed="0.112093"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.553273" elapsed="0.114081"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.552732" elapsed="0.114724"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.551717" elapsed="0.115865"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.551264" elapsed="0.116416"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.668903" level="INFO">${next} = 18479</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.668094" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.670214" level="INFO">${current_port} = 18479</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.669323" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.546425" elapsed="0.124014"/>
</kw>
<msg time="2026-08-15T23:56:32.670525" level="INFO">Repeating keyword, round 650/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.673136" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.672887" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.672842" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.674058" level="INFO">${current_Date} = 2026-08-15 23:56:32.674</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.673676" elapsed="0.000441"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.675167" level="INFO">${ellapsed_seconds} = 2597.663</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.674450" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.675980" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.675383" elapsed="0.000726"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.675342" elapsed="0.000821"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.672322" elapsed="0.003952"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.676884" level="INFO">${number} = 650</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.676496" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.678303" level="INFO">${number} = 650</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.677968" elapsed="0.000361"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.680307" level="INFO">${device-port} = 18479</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.679480" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.685701" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.716410" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.716665" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.685601" elapsed="0.031124"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.717765" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:32.717936" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.716980" elapsed="0.001065">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.716923" elapsed="0.001216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.685295" elapsed="0.033133">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.682044" elapsed="0.036647"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.719576" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18479 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.788150" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.788359" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.719084" elapsed="0.069330"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.788524" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:32.788988" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.681618" elapsed="0.107479"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.789651" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.680840" elapsed="0.109910"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.679029" elapsed="0.111947"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.678491" elapsed="0.112586"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.677511" elapsed="0.113710"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.677065" elapsed="0.114256"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.792517" level="INFO">${next} = 18480</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.791712" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.793874" level="INFO">${current_port} = 18480</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.792973" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.671009" elapsed="0.123093"/>
</kw>
<msg time="2026-08-15T23:56:32.794191" level="INFO">Repeating keyword, round 651/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.796774" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.796533" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.796491" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.797626" level="INFO">${current_Date} = 2026-08-15 23:56:32.797</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.797276" elapsed="0.000409"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.798736" level="INFO">${ellapsed_seconds} = 2597.54</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.798045" elapsed="0.000749"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.799648" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.798983" elapsed="0.000853"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.798941" elapsed="0.000956"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.796004" elapsed="0.004001"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.800756" level="INFO">${number} = 651</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.800359" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.802310" level="INFO">${number} = 651</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.801911" elapsed="0.000430"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.804596" level="INFO">${device-port} = 18480</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.803814" elapsed="0.000861"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.807328" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.840079" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.840303" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.807231" elapsed="0.033130"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.841280" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:32.841412" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.840534" elapsed="0.001073">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.840488" elapsed="0.001218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.806761" elapsed="0.035251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.806375" elapsed="0.035780"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.843012" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18480 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:32.908360" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.908589" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.842502" elapsed="0.066143"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:32.908763" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:56:32.909223" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.805964" elapsed="0.103371"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:32.909962" elapsed="0.000945"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.805154" elapsed="0.105999"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.803267" elapsed="0.108081"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.802536" elapsed="0.108914"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.801401" elapsed="0.110175"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.800954" elapsed="0.110717"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.912894" level="INFO">${next} = 18481</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.912068" elapsed="0.000890"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.914303" level="INFO">${current_port} = 18481</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:32.913321" elapsed="0.001081"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.794616" elapsed="0.119916"/>
</kw>
<msg time="2026-08-15T23:56:32.914619" level="INFO">Repeating keyword, round 652/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:32.917258" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:32.917008" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.916964" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.918472" level="INFO">${current_Date} = 2026-08-15 23:56:32.918</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:32.918053" elapsed="0.000482"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:32.919624" level="INFO">${ellapsed_seconds} = 2597.419</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:32.918905" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.920417" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:32.919873" elapsed="0.000667"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:32.919829" elapsed="0.000769"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:32.916417" elapsed="0.004283"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.921920" level="INFO">${number} = 652</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.921056" elapsed="0.000925"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.924549" level="INFO">${number} = 652</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.924040" elapsed="0.000549"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:32.927573" level="INFO">${device-port} = 18481</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:32.926324" elapsed="0.001365"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.931564" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:32.979974" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:32.980203" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.931164" elapsed="0.049099"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:32.981190" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:32.981328" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:32.980436" elapsed="0.001000">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:32.980389" elapsed="0.001137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:32.930647" elapsed="0.051188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:32.930102" elapsed="0.051950"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:32.982945" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18481 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.056442" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.056656" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:32.982402" elapsed="0.074308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.056858" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:33.057266" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:32.929495" elapsed="0.127880"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.057975" elapsed="0.000942"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:32.928340" elapsed="0.130768"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:32.925628" elapsed="0.133677"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:32.924847" elapsed="0.134536"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.923352" elapsed="0.136111"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:32.922329" elapsed="0.137195"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.060239" level="INFO">${next} = 18482</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.059738" elapsed="0.000538"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.061068" level="INFO">${current_port} = 18482</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.060501" elapsed="0.000628"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:32.915150" elapsed="0.146060"/>
</kw>
<msg time="2026-08-15T23:56:33.061263" level="INFO">Repeating keyword, round 653/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.062866" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.062676" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.062649" elapsed="0.000307"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.063384" level="INFO">${current_Date} = 2026-08-15 23:56:33.063</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.063163" elapsed="0.000258"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.064081" level="INFO">${ellapsed_seconds} = 2597.274</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.063631" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.064545" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.064217" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.064191" elapsed="0.000464"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.062331" elapsed="0.002386"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.065451" level="INFO">${number} = 653</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.064942" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.067496" level="INFO">${number} = 653</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.067016" elapsed="0.000518"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.070270" level="INFO">${device-port} = 18482</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.069167" elapsed="0.001214"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.073196" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.103825" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.104065" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.073097" elapsed="0.031030"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.105070" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:33.105208" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.104305" elapsed="0.001110">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.104255" elapsed="0.001259">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.072791" elapsed="0.033053">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.072401" elapsed="0.033593"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.106900" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18482 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.172199" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.172409" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.106354" elapsed="0.066110"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.172576" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:33.173031" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.071987" elapsed="0.101153"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.173698" elapsed="0.000961"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.071059" elapsed="0.103828"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.068503" elapsed="0.106581"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.067758" elapsed="0.107427"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.066357" elapsed="0.108952"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.065706" elapsed="0.109698"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.176545" level="INFO">${next} = 18483</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.175749" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.177924" level="INFO">${current_port} = 18483</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.177025" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.061529" elapsed="0.116879"/>
</kw>
<msg time="2026-08-15T23:56:33.178532" level="INFO">Repeating keyword, round 654/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.181140" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.180893" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.180848" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.182092" level="INFO">${current_Date} = 2026-08-15 23:56:33.182</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.181691" elapsed="0.000503"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.183268" level="INFO">${ellapsed_seconds} = 2597.155</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.182539" elapsed="0.000789"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.184050" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.183487" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.183445" elapsed="0.000789"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.180325" elapsed="0.004013"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.185514" level="INFO">${number} = 654</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.184666" elapsed="0.000906"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.188274" level="INFO">${number} = 654</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.187779" elapsed="0.000532"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.191187" level="INFO">${device-port} = 18483</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.190007" elapsed="0.001293"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.195061" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.219347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.219474" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.194789" elapsed="0.024712"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.219914" elapsed="0.000027"/>
</kw>
<msg time="2026-08-15T23:56:33.219976" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.219575" elapsed="0.000450">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.219554" elapsed="0.000512">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.194381" elapsed="0.025807">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.193637" elapsed="0.026648"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.220658" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18483 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.287489" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.287589" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.220443" elapsed="0.067171"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.287663" elapsed="0.000032"/>
</return>
<msg time="2026-08-15T23:56:33.287866" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.193056" elapsed="0.094860"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.288167" elapsed="0.000376"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.191939" elapsed="0.096689"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.189311" elapsed="0.099401"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.188540" elapsed="0.100217"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.187042" elapsed="0.101792"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.185950" elapsed="0.102930"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.289372" level="INFO">${next} = 18484</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.289034" elapsed="0.000364"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.290012" level="INFO">${current_port} = 18484</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.289558" elapsed="0.000498"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.179045" elapsed="0.111069"/>
</kw>
<msg time="2026-08-15T23:56:33.290153" level="INFO">Repeating keyword, round 655/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.291265" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.291156" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.291136" elapsed="0.000193"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.291631" level="INFO">${current_Date} = 2026-08-15 23:56:33.292</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.291478" elapsed="0.000180"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.292133" level="INFO">${ellapsed_seconds} = 2597.045</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.291827" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.292466" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.292229" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.292210" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.290911" elapsed="0.001680"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.293135" level="INFO">${number} = 655</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.292736" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.294605" level="INFO">${number} = 655</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.294262" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.296583" level="INFO">${device-port} = 18484</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.295782" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.299160" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.336361" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.336682" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.299058" elapsed="0.037687"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.337914" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:56:33.338063" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.337009" elapsed="0.001289">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.336943" elapsed="0.001459">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.298750" elapsed="0.039948">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.298361" elapsed="0.040520"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.339837" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18484 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.404030" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.404246" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.339265" elapsed="0.065041"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.404423" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:33.404911" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.297946" elapsed="0.107082"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.405622" elapsed="0.000954"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.297111" elapsed="0.109656"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.295334" elapsed="0.111677"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.294796" elapsed="0.112319"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.293789" elapsed="0.113455"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.293316" elapsed="0.114025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.408502" level="INFO">${next} = 18485</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.407689" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.409958" level="INFO">${current_port} = 18485</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.408971" elapsed="0.001087"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.290341" elapsed="0.119852"/>
</kw>
<msg time="2026-08-15T23:56:33.410280" level="INFO">Repeating keyword, round 656/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.412854" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.412579" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.412538" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.413860" level="INFO">${current_Date} = 2026-08-15 23:56:33.414</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.413462" elapsed="0.000462"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.414754" level="INFO">${ellapsed_seconds} = 2596.923</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.414273" elapsed="0.000519"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.415256" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.414914" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.414887" elapsed="0.000479"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.412052" elapsed="0.003378"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.416164" level="INFO">${number} = 656</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.415634" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.418214" level="INFO">${number} = 656</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.417705" elapsed="0.000547"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.421166" level="INFO">${device-port} = 18485</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.420024" elapsed="0.001284"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.424797" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.456202" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.456426" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.424653" elapsed="0.031832"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.457446" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:33.457585" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.456649" elapsed="0.001041">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.456603" elapsed="0.001179">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.424270" elapsed="0.033819">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.423638" elapsed="0.034663"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.459175" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18485 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.528149" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.528435" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.458658" elapsed="0.069834"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.528630" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:56:33.529186" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.423061" elapsed="0.106240"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.529955" elapsed="0.000960"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.421949" elapsed="0.109161"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.419229" elapsed="0.112075"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.418472" elapsed="0.112936"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.417064" elapsed="0.114471"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.416419" elapsed="0.115216"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.532795" level="INFO">${next} = 18486</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.532029" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.534210" level="INFO">${current_port} = 18486</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.533284" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.410708" elapsed="0.123729"/>
</kw>
<msg time="2026-08-15T23:56:33.534525" level="INFO">Repeating keyword, round 657/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.537196" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.536941" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.536848" elapsed="0.000509"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.537696" level="INFO">${current_Date} = 2026-08-15 23:56:33.538</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.537526" elapsed="0.000198"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.538215" level="INFO">${ellapsed_seconds} = 2596.799</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.537888" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.538561" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.538311" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.538293" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.536328" elapsed="0.002365"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.539215" level="INFO">${number} = 657</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.538855" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.540644" level="INFO">${number} = 657</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.540306" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.542662" level="INFO">${device-port} = 18486</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.541885" elapsed="0.000858"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.545420" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.572016" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.572236" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.545149" elapsed="0.027146"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.573252" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:33.573387" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.572458" elapsed="0.001129">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.572414" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.544867" elapsed="0.029137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.544443" elapsed="0.029707"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.575012" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18486 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.644309" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.644524" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.574496" elapsed="0.070116"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.644725" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:56:33.645175" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.544029" elapsed="0.101257"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.645882" elapsed="0.000838"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.543215" elapsed="0.103732"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.541412" elapsed="0.105726"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.540854" elapsed="0.106385"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.539863" elapsed="0.107499"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.539400" elapsed="0.108058"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.648642" level="INFO">${next} = 18487</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.647844" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.649771" level="INFO">${current_port} = 18487</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.649129" elapsed="0.000732"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.535036" elapsed="0.114907"/>
</kw>
<msg time="2026-08-15T23:56:33.649998" level="INFO">Repeating keyword, round 658/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.651547" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.651395" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.651368" elapsed="0.000268"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.652123" level="INFO">${current_Date} = 2026-08-15 23:56:33.652</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.651907" elapsed="0.000254"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.652847" level="INFO">${ellapsed_seconds} = 2596.685</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.652368" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.653312" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.652985" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.652960" elapsed="0.000463"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.651058" elapsed="0.002429"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.654225" level="INFO">${number} = 658</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.653690" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.656238" level="INFO">${number} = 658</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.655734" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.658692" level="INFO">${device-port} = 18487</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.657883" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.661417" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.695878" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.696103" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.661171" elapsed="0.034991"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.697100" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:33.697237" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.696326" elapsed="0.001018">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.696280" elapsed="0.001154">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.660892" elapsed="0.036810">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.660460" elapsed="0.037489"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.698787" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18487 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.764433" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.764733" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.698304" elapsed="0.066487"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.764968" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:56:33.765440" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.660040" elapsed="0.105509"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.766200" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.659230" elapsed="0.108093"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.657385" elapsed="0.110131"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.656501" elapsed="0.111119"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.655118" elapsed="0.112630"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.654477" elapsed="0.113420"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.769116" level="INFO">${next} = 18488</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.768288" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.770483" level="INFO">${current_port} = 18488</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.769551" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.650262" elapsed="0.120445"/>
</kw>
<msg time="2026-08-15T23:56:33.770796" level="INFO">Repeating keyword, round 659/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.773483" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.773280" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.773220" elapsed="0.000358"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.774032" level="INFO">${current_Date} = 2026-08-15 23:56:33.774</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.773782" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.774715" level="INFO">${ellapsed_seconds} = 2596.563</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.774274" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.775302" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.774869" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.774842" elapsed="0.000580"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.772690" elapsed="0.002796"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.776304" level="INFO">${number} = 659</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.775689" elapsed="0.000653"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.778329" level="INFO">${number} = 659</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.777856" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.781127" level="INFO">${device-port} = 18488</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.779986" elapsed="0.001254"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.784982" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.815950" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.816210" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.784835" elapsed="0.031441"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.817222" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:33.817357" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.816464" elapsed="0.001104">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.816412" elapsed="0.001253">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.784199" elapsed="0.033782">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.783569" elapsed="0.034557"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.818980" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18488 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:33.883641" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.883978" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.818470" elapsed="0.065570"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:33.884172" elapsed="0.000098"/>
</return>
<msg time="2026-08-15T23:56:33.884681" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.782998" elapsed="0.101800"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:33.885481" elapsed="0.001053"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.781879" elapsed="0.104854"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.779336" elapsed="0.107665"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.778584" elapsed="0.108528"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.777207" elapsed="0.110041"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.776561" elapsed="0.110789"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.888622" level="INFO">${next} = 18489</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.887722" elapsed="0.000965"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.890135" level="INFO">${current_port} = 18489</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:33.889135" elapsed="0.001104"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.771317" elapsed="0.119062"/>
</kw>
<msg time="2026-08-15T23:56:33.890473" level="INFO">Repeating keyword, round 660/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:33.892942" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:33.892753" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.892725" elapsed="0.000316"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.893548" level="INFO">${current_Date} = 2026-08-15 23:56:33.893</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:33.893315" elapsed="0.000270"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:33.894259" level="INFO">${ellapsed_seconds} = 2596.444</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:33.893792" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.894737" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:33.894394" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:33.894369" elapsed="0.000500"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:33.892402" elapsed="0.002531"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.895641" level="INFO">${number} = 660</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.895136" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.897713" level="INFO">${number} = 660</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.897223" elapsed="0.000527"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:33.900542" level="INFO">${device-port} = 18489</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:33.899397" elapsed="0.001257"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.904545" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:33.935557" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:33.935868" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.904441" elapsed="0.031493"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:33.936881" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:33.937021" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:33.936112" elapsed="0.001017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:33.936064" elapsed="0.001156">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:33.904053" elapsed="0.033452">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:33.903036" elapsed="0.034686"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:33.938599" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18489 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.003783" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.003900" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:33.938107" elapsed="0.065818"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.003978" elapsed="0.000038"/>
</return>
<msg time="2026-08-15T23:56:34.004183" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:33.902412" elapsed="0.101820"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.004489" elapsed="0.000443"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:33.901300" elapsed="0.103718"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:33.898746" elapsed="0.106359"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:33.898008" elapsed="0.107144"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.896577" elapsed="0.108631"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:33.895944" elapsed="0.109309"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.005757" level="INFO">${next} = 18490</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.005408" elapsed="0.000376"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.006368" level="INFO">${current_port} = 18490</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.005973" elapsed="0.000437"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:33.891014" elapsed="0.115454"/>
</kw>
<msg time="2026-08-15T23:56:34.006507" level="INFO">Repeating keyword, round 661/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.007707" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.007597" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.007578" elapsed="0.000193"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.008117" level="INFO">${current_Date} = 2026-08-15 23:56:34.008</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.007948" elapsed="0.000201"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.008627" level="INFO">${ellapsed_seconds} = 2596.329</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.008298" elapsed="0.000356"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.008999" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.008724" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.008705" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.007312" elapsed="0.001810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.009661" level="INFO">${number} = 661</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.009270" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.011122" level="INFO">${number} = 661</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.010767" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.013122" level="INFO">${device-port} = 18490</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.012328" elapsed="0.000873"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.015863" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.055315" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.055519" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.015738" elapsed="0.039834"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.056348" elapsed="0.000025"/>
</kw>
<msg time="2026-08-15T23:56:34.056407" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.055721" elapsed="0.000775">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.055680" elapsed="0.000860">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.015463" elapsed="0.041203">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.014884" elapsed="0.041845"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.057114" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18490 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.124087" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.124346" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.056900" elapsed="0.067505"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.124533" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:56:34.125042" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.014450" elapsed="0.110713"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.125788" elapsed="0.001001"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.013644" elapsed="0.113458"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.011879" elapsed="0.115442"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.011313" elapsed="0.116111"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.010313" elapsed="0.117235"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.009866" elapsed="0.117776"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.128908" level="INFO">${next} = 18491</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.128037" elapsed="0.000936"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.130254" level="INFO">${current_port} = 18491</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.129350" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.006705" elapsed="0.123777"/>
</kw>
<msg time="2026-08-15T23:56:34.130567" level="INFO">Repeating keyword, round 662/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.133251" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.133002" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.132959" elapsed="0.000441"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.134207" level="INFO">${current_Date} = 2026-08-15 23:56:34.134</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.133847" elapsed="0.000452"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.135391" level="INFO">${ellapsed_seconds} = 2596.203</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.134634" elapsed="0.000787"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.135743" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.135493" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.135474" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.132439" elapsed="0.003447"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.136405" level="INFO">${number} = 662</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.136033" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.137855" level="INFO">${number} = 662</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.137492" elapsed="0.000390"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.139856" level="INFO">${device-port} = 18491</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.139059" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.145162" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.176010" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.176259" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.145032" elapsed="0.031290"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.177373" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:34.177518" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.176517" elapsed="0.001118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.176464" elapsed="0.001275">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.144525" elapsed="0.033556">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.141596" elapsed="0.036739"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.179333" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18491 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.243548" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.243755" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.178734" elapsed="0.065113"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.243964" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:34.244387" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.141179" elapsed="0.103316"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.245090" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.140380" elapsed="0.105807"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.138567" elapsed="0.107805"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.138041" elapsed="0.108430"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.137049" elapsed="0.109546"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.136588" elapsed="0.110132"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.247914" level="INFO">${next} = 18492</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.247107" elapsed="0.000869"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.249243" level="INFO">${current_port} = 18492</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.248334" elapsed="0.001006"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.131140" elapsed="0.118330"/>
</kw>
<msg time="2026-08-15T23:56:34.249558" level="INFO">Repeating keyword, round 663/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.252140" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.251893" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.251849" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.252997" level="INFO">${current_Date} = 2026-08-15 23:56:34.253</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.252607" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.254104" level="INFO">${ellapsed_seconds} = 2596.084</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.253388" elapsed="0.000774"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.254931" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.254320" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.254279" elapsed="0.000835"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.251332" elapsed="0.003883"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.255871" level="INFO">${number} = 663</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.255486" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.257304" level="INFO">${number} = 663</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.256963" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.259310" level="INFO">${device-port} = 18492</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.258483" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.262018" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.295733" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.295981" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.261918" elapsed="0.034123"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.296937" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:34.297072" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.296206" elapsed="0.001048">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.296161" elapsed="0.001190">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.261449" elapsed="0.036171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.261061" elapsed="0.036701"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.298671" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18492 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.368264" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.368493" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.298140" elapsed="0.070408"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.368670" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:34.369132" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.260634" elapsed="0.108610"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.369863" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.259855" elapsed="0.111158"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.258037" elapsed="0.113163"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.257488" elapsed="0.113813"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.256502" elapsed="0.114923"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.256053" elapsed="0.115467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.372651" level="INFO">${next} = 18493</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.371896" elapsed="0.000815"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.374029" level="INFO">${current_port} = 18493</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.373119" elapsed="0.001006"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.250043" elapsed="0.124210"/>
</kw>
<msg time="2026-08-15T23:56:34.374360" level="INFO">Repeating keyword, round 664/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.376960" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.376675" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.376631" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.377901" level="INFO">${current_Date} = 2026-08-15 23:56:34.378</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.377511" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.379084" level="INFO">${ellapsed_seconds} = 2595.959</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.378343" elapsed="0.000801"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.379633" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.379314" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.379267" elapsed="0.000445"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.376142" elapsed="0.003615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.380288" level="INFO">${number} = 664</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.379917" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.381721" level="INFO">${number} = 664</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.381378" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.383703" level="INFO">${device-port} = 18493</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.382929" elapsed="0.000854"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.386465" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.420120" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.420358" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.386147" elapsed="0.034272"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.421351" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:34.421489" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.420590" elapsed="0.001061">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.420545" elapsed="0.001200">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.385868" elapsed="0.036179">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.385453" elapsed="0.037009"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.423365" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18493 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.492124" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.492349" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.422866" elapsed="0.069540"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.492522" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:34.492978" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.385041" elapsed="0.108050"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.493647" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.384241" elapsed="0.110520"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.382463" elapsed="0.112535"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.381923" elapsed="0.113177"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.380934" elapsed="0.114291"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.380471" elapsed="0.114850"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.496458" level="INFO">${next} = 18494</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.495663" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.497775" level="INFO">${current_port} = 18494</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.496926" elapsed="0.001026"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.374838" elapsed="0.123246"/>
</kw>
<msg time="2026-08-15T23:56:34.498169" level="INFO">Repeating keyword, round 665/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.500674" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.500429" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.500387" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.501524" level="INFO">${current_Date} = 2026-08-15 23:56:34.501</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.501183" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.502554" level="INFO">${ellapsed_seconds} = 2595.836</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.501997" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.502907" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.502651" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.502633" elapsed="0.000357"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.499897" elapsed="0.003139"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.503553" level="INFO">${number} = 665</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.503182" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.505028" level="INFO">${number} = 665</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.504669" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.507093" level="INFO">${device-port} = 18494</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.506262" elapsed="0.000914"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.509697" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.543942" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.544179" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.509588" elapsed="0.034652"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.545166" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:34.545303" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.544413" elapsed="0.001078">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.544366" elapsed="0.001224">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.509302" elapsed="0.036640">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.508904" elapsed="0.037188"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.546980" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18494 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.612203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.612448" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.546450" elapsed="0.066055"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.612630" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:34.613111" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.508463" elapsed="0.104761"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.613900" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.507632" elapsed="0.107400"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.505734" elapsed="0.109489"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.505216" elapsed="0.110109"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.504220" elapsed="0.111232"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.503736" elapsed="0.111810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.616715" level="INFO">${next} = 18495</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.615944" elapsed="0.000832"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.618553" level="INFO">${current_port} = 18495</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.617197" elapsed="0.001465"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.498591" elapsed="0.120273"/>
</kw>
<msg time="2026-08-15T23:56:34.618957" level="INFO">Repeating keyword, round 666/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.621662" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.621361" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.621317" elapsed="0.000522"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.622538" level="INFO">${current_Date} = 2026-08-15 23:56:34.622</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.622259" elapsed="0.000306"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.623074" level="INFO">${ellapsed_seconds} = 2595.715</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.622730" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.623426" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.623170" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.623152" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.620791" elapsed="0.002762"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.624102" level="INFO">${number} = 666</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.623699" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.625539" level="INFO">${number} = 666</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.625196" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.627555" level="INFO">${device-port} = 18495</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.626738" elapsed="0.000899"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.630309" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.663935" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.664158" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.630201" elapsed="0.034017"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.665125" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:34.665259" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.664380" elapsed="0.000986">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.664335" elapsed="0.001148">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.629920" elapsed="0.035842">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.629460" elapsed="0.036547"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.666881" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18495 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.732109" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.732321" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.666365" elapsed="0.066012"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.732488" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:34.732938" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.629045" elapsed="0.104007"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.733646" elapsed="0.000901"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.628234" elapsed="0.106502"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.626286" elapsed="0.108694"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.625739" elapsed="0.109344"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.624731" elapsed="0.110475"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.624286" elapsed="0.111017"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.736445" level="INFO">${next} = 18496</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.735650" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.737785" level="INFO">${current_port} = 18496</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.736910" elapsed="0.001036"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.619456" elapsed="0.118618"/>
</kw>
<msg time="2026-08-15T23:56:34.738161" level="INFO">Repeating keyword, round 667/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.740672" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.740428" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.740385" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.741614" level="INFO">${current_Date} = 2026-08-15 23:56:34.741</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.741186" elapsed="0.000489"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.742587" level="INFO">${ellapsed_seconds} = 2595.596</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.742048" elapsed="0.000565"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.742938" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.742684" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.742665" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.739892" elapsed="0.003173"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.743587" level="INFO">${number} = 667</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.743217" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.745040" level="INFO">${number} = 667</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.744681" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.747025" level="INFO">${device-port} = 18496</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.746241" elapsed="0.000865"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.749576" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.784211" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.784461" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.749471" elapsed="0.035052"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.785519" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:34.785659" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.784705" elapsed="0.001197">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.784656" elapsed="0.001348">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.749170" elapsed="0.037118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.748764" elapsed="0.037668"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.787324" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18496 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.852663" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.852942" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.786793" elapsed="0.066210"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.853121" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:34.853544" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.748346" elapsed="0.105311"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.854271" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.747544" elapsed="0.107829"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.745766" elapsed="0.109797"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.745240" elapsed="0.110426"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.744235" elapsed="0.111557"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.743770" elapsed="0.112160"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.857139" level="INFO">${next} = 18497</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.856282" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.858520" level="INFO">${current_port} = 18497</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.857605" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.738578" elapsed="0.120168"/>
</kw>
<msg time="2026-08-15T23:56:34.858896" level="INFO">Repeating keyword, round 668/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.861419" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.861251" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.861207" elapsed="0.000302"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.862012" level="INFO">${current_Date} = 2026-08-15 23:56:34.862</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.861764" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.862701" level="INFO">${ellapsed_seconds} = 2595.475</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.862262" elapsed="0.000476"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.863200" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.862860" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.862832" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.860634" elapsed="0.002748"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.864126" level="INFO">${number} = 668</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.863588" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.866179" level="INFO">${number} = 668</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.865675" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.869014" level="INFO">${device-port} = 18497</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.867897" elapsed="0.001236"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.872659" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:34.903910" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.904137" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.872522" elapsed="0.031673"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.905145" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:34.905285" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:34.904361" elapsed="0.001030">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:34.904315" elapsed="0.001169">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.872138" elapsed="0.033615">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.871566" elapsed="0.034430"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.906876" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18497 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:34.971548" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:34.971762" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.906354" elapsed="0.065501"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:34.971970" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:34.972368" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.870882" elapsed="0.101595"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:34.973103" elapsed="0.000871"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.869743" elapsed="0.104420"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.867197" elapsed="0.107154"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.866442" elapsed="0.108008"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.865046" elapsed="0.109526"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.864381" elapsed="0.110287"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.975841" level="INFO">${next} = 18498</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.975053" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.977242" level="INFO">${current_port} = 18498</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:34.976267" elapsed="0.001089"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.859330" elapsed="0.118178"/>
</kw>
<msg time="2026-08-15T23:56:34.977600" level="INFO">Repeating keyword, round 669/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:34.980174" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:34.979925" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.979880" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.981099" level="INFO">${current_Date} = 2026-08-15 23:56:34.981</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:34.980705" elapsed="0.000454"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:34.981758" level="INFO">${ellapsed_seconds} = 2595.356</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:34.981432" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:34.982116" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:34.981871" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:34.981851" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:34.979360" elapsed="0.002878"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.982747" level="INFO">${number} = 669</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.982384" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.984190" level="INFO">${number} = 669</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.983854" elapsed="0.000363"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:34.986227" level="INFO">${device-port} = 18498</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:34.985436" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:34.988952" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.024591" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.025067" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:34.988661" elapsed="0.036476"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.026461" elapsed="0.000113"/>
</kw>
<msg time="2026-08-15T23:56:35.026706" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.025419" elapsed="0.001659">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.025333" elapsed="0.001876">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:34.988369" elapsed="0.039176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:34.987983" elapsed="0.039720"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.028835" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18498 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.095782" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.096033" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.028173" elapsed="0.067915"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.096210" elapsed="0.000107"/>
</return>
<msg time="2026-08-15T23:56:35.096735" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:34.987546" elapsed="0.109406"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.097562" elapsed="0.000996"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:34.986750" elapsed="0.112006"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:34.984963" elapsed="0.114045"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:34.984380" elapsed="0.114734"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.983393" elapsed="0.115852"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:34.982944" elapsed="0.116406"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.100603" level="INFO">${next} = 18499</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.099707" elapsed="0.000958"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.101732" level="INFO">${current_port} = 18499</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.101083" elapsed="0.000709"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:34.978091" elapsed="0.123831"/>
</kw>
<msg time="2026-08-15T23:56:35.101981" level="INFO">Repeating keyword, round 670/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.103662" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.103506" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.103477" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.104319" level="INFO">${current_Date} = 2026-08-15 23:56:35.104</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.104039" elapsed="0.000317"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.105067" level="INFO">${ellapsed_seconds} = 2595.233</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.104569" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.105563" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.105203" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.105177" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.103165" elapsed="0.002590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.106501" level="INFO">${number} = 670</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.105986" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.108547" level="INFO">${number} = 670</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.108052" elapsed="0.000532"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.111381" level="INFO">${device-port} = 18499</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.110261" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.114751" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.147933" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.148182" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.114488" elapsed="0.033759"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.149249" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:35.149386" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.148446" elapsed="0.001049">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.148390" elapsed="0.001218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.114212" elapsed="0.035723">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.113783" elapsed="0.036370"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.151060" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18499 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.216046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.216258" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.150509" elapsed="0.065804"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.216423" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:35.216880" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.113305" elapsed="0.103689"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.217548" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.112140" elapsed="0.106480"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.109602" elapsed="0.109250"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.108825" elapsed="0.110134"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.107411" elapsed="0.111673"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.106755" elapsed="0.112426"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.220337" level="INFO">${next} = 18500</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.219530" elapsed="0.000868"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.221644" level="INFO">${current_port} = 18500</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.220754" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.102269" elapsed="0.119667"/>
</kw>
<msg time="2026-08-15T23:56:35.222026" level="INFO">Repeating keyword, round 671/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.224471" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.224310" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.224277" elapsed="0.000284"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.225014" level="INFO">${current_Date} = 2026-08-15 23:56:35.225</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.224769" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.225693" level="INFO">${ellapsed_seconds} = 2595.112</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.225263" elapsed="0.000466"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.226179" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.225848" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.225819" elapsed="0.000468"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.223708" elapsed="0.002642"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.227077" level="INFO">${number} = 671</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.226551" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.229119" level="INFO">${number} = 671</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.228623" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.231938" level="INFO">${device-port} = 18500</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.230770" elapsed="0.001283"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.235716" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.267928" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.268155" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.235584" elapsed="0.032631"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.269184" elapsed="0.000071"/>
</kw>
<msg time="2026-08-15T23:56:35.269347" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.268399" elapsed="0.001179">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.268340" elapsed="0.001371">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.235099" elapsed="0.034974">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.234395" elapsed="0.035855"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.271256" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18500 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.335883" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.336099" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.270686" elapsed="0.065468"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.336265" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:35.336676" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.233784" elapsed="0.103005"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.337393" elapsed="0.000872"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.232669" elapsed="0.105813"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.230145" elapsed="0.108534"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.229386" elapsed="0.109395"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.227997" elapsed="0.110955"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.227328" elapsed="0.111720"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.340224" level="INFO">${next} = 18501</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.339390" elapsed="0.000898"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.341121" level="INFO">${current_port} = 18501</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.340564" elapsed="0.000616"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.222452" elapsed="0.118903"/>
</kw>
<msg time="2026-08-15T23:56:35.341410" level="INFO">Repeating keyword, round 672/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.343074" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.342915" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.342884" elapsed="0.000290"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.343674" level="INFO">${current_Date} = 2026-08-15 23:56:35.344</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.343435" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.344376" level="INFO">${ellapsed_seconds} = 2594.993</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.343941" elapsed="0.000472"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.344855" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.344510" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.344485" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.342520" elapsed="0.002511"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.345738" level="INFO">${number} = 672</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.345234" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.347770" level="INFO">${number} = 672</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.347276" elapsed="0.000552"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.350322" level="INFO">${device-port} = 18501</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.349521" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.353059" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.387695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.387960" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.352960" elapsed="0.035061"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.388952" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:56:35.389106" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.388187" elapsed="0.001026">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.388140" elapsed="0.001184">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.352660" elapsed="0.036982">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.352108" elapsed="0.037834"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.390977" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18501 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.456049" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.456262" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.390368" elapsed="0.065950"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.456448" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:35.456968" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.351670" elapsed="0.105433"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.457692" elapsed="0.000915"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.350867" elapsed="0.107980"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.348882" elapsed="0.110169"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.348050" elapsed="0.111102"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.346628" elapsed="0.112677"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.346011" elapsed="0.113416"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.460630" level="INFO">${next} = 18502</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.459779" elapsed="0.000916"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.462239" level="INFO">${current_port} = 18502</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.461108" elapsed="0.001258"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.341687" elapsed="0.120841"/>
</kw>
<msg time="2026-08-15T23:56:35.462621" level="INFO">Repeating keyword, round 673/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.465570" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.465293" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.465237" elapsed="0.000497"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.466484" level="INFO">${current_Date} = 2026-08-15 23:56:35.466</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.466112" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.467703" level="INFO">${ellapsed_seconds} = 2594.871</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.466925" elapsed="0.000846"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.468500" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.467972" elapsed="0.000590"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.467925" elapsed="0.000662"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.464698" elapsed="0.003934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.469171" level="INFO">${number} = 673</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.468787" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.470680" level="INFO">${number} = 673</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.470327" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.472758" level="INFO">${device-port} = 18502</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.471947" elapsed="0.000920"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.475570" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.533981" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.534204" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.475472" elapsed="0.058790"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.535205" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:35.535344" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.534430" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.534384" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.475178" elapsed="0.060792">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.474588" elapsed="0.061529"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.537057" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18502 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.604152" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.604368" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.536514" elapsed="0.067911"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.604539" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:56:35.605006" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.474169" elapsed="0.130948"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.605742" elapsed="0.001023"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.473311" elapsed="0.133723"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.471453" elapsed="0.135768"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.470896" elapsed="0.136423"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.469841" elapsed="0.137600"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.469364" elapsed="0.138171"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.608672" level="INFO">${next} = 18503</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.607922" elapsed="0.000810"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.610056" level="INFO">${current_port} = 18503</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.609146" elapsed="0.001031"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.463131" elapsed="0.147195"/>
</kw>
<msg time="2026-08-15T23:56:35.610416" level="INFO">Repeating keyword, round 674/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.613145" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.612886" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.612841" elapsed="0.000451"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.614063" level="INFO">${current_Date} = 2026-08-15 23:56:35.614</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.613686" elapsed="0.000436"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.615204" level="INFO">${ellapsed_seconds} = 2594.723</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.614451" elapsed="0.000812"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.615706" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.615445" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.615418" elapsed="0.000366"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.612313" elapsed="0.003535"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.616369" level="INFO">${number} = 674</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.616004" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.617794" level="INFO">${number} = 674</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.617455" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.619773" level="INFO">${device-port} = 18503</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.618998" elapsed="0.000873"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.625189" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.655911" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.656131" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.625065" elapsed="0.031125"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.657089" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:35.657222" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.656353" elapsed="0.000975">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.656308" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.624733" elapsed="0.032991">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.621575" elapsed="0.036388"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.658873" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18503 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.724142" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.724384" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.658313" elapsed="0.066141"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.724565" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:35.725018" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.621160" elapsed="0.103968"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.725714" elapsed="0.000967"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.620338" elapsed="0.106576"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.618513" elapsed="0.108594"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.617996" elapsed="0.109213"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.617011" elapsed="0.110343"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.616551" elapsed="0.110904"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.728622" level="INFO">${next} = 18504</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.727842" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.730042" level="INFO">${current_port} = 18504</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.729102" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.610986" elapsed="0.119282"/>
</kw>
<msg time="2026-08-15T23:56:35.730353" level="INFO">Repeating keyword, round 675/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.733074" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.732793" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.732750" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.733954" level="INFO">${current_Date} = 2026-08-15 23:56:35.734</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.733565" elapsed="0.000449"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.735142" level="INFO">${ellapsed_seconds} = 2594.603</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.734345" elapsed="0.000858"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.735677" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.735380" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.735330" elapsed="0.000427"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.732205" elapsed="0.003615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.736339" level="INFO">${number} = 675</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.735967" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.737784" level="INFO">${number} = 675</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.737436" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.739824" level="INFO">${device-port} = 18504</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.739016" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.742677" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.776071" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.776312" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.742569" elapsed="0.033805"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.777308" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:35.777450" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.776542" elapsed="0.001094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.776494" elapsed="0.001242">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.742098" elapsed="0.035946">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.741671" elapsed="0.036520"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.779112" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18504 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.844240" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.844460" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.778586" elapsed="0.065930"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.844647" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:35.845115" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.741249" elapsed="0.103977"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.845869" elapsed="0.000925"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.740349" elapsed="0.106685"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.738507" elapsed="0.108717"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.737987" elapsed="0.109340"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.736991" elapsed="0.110460"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.736518" elapsed="0.111029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.848739" level="INFO">${next} = 18505</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.847963" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.850159" level="INFO">${current_port} = 18505</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.849234" elapsed="0.001051"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.730904" elapsed="0.119515"/>
</kw>
<msg time="2026-08-15T23:56:35.850507" level="INFO">Repeating keyword, round 676/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.853151" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.852890" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.852838" elapsed="0.000457"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.854119" level="INFO">${current_Date} = 2026-08-15 23:56:35.854</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.853712" elapsed="0.000469"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.855333" level="INFO">${ellapsed_seconds} = 2594.483</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.854571" elapsed="0.000831"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.855747" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.855499" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.855476" elapsed="0.000369"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.852312" elapsed="0.003583"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.856428" level="INFO">${number} = 676</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.856058" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.857896" level="INFO">${number} = 676</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.857536" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.860044" level="INFO">${device-port} = 18505</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.859214" elapsed="0.000913"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.862866" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:35.891978" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.892205" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.862573" elapsed="0.029691"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.893205" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:35.893341" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:35.892441" elapsed="0.001012">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:35.892384" elapsed="0.001182">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.862284" elapsed="0.031592">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.861858" elapsed="0.032244"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.895060" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18505 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:35.960253" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:35.960462" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.894528" elapsed="0.065989"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:35.960626" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:35.961059" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.861418" elapsed="0.099751"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:35.961779" elapsed="0.000983"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.860577" elapsed="0.102445"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.858716" elapsed="0.104517"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.858096" elapsed="0.105255"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.857087" elapsed="0.106399"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.856610" elapsed="0.106982"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.964931" level="INFO">${next} = 18506</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.964001" elapsed="0.000994"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.966269" level="INFO">${current_port} = 18506</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:35.965360" elapsed="0.001006"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.851012" elapsed="0.115482"/>
</kw>
<msg time="2026-08-15T23:56:35.966579" level="INFO">Repeating keyword, round 677/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:35.969124" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:35.968880" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.968835" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.970022" level="INFO">${current_Date} = 2026-08-15 23:56:35.970</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:35.969591" elapsed="0.000502"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:35.970757" level="INFO">${ellapsed_seconds} = 2594.367</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:35.970439" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:35.971106" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:35.970870" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:35.970851" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:35.968324" elapsed="0.002907"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.971741" level="INFO">${number} = 677</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.971377" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.973207" level="INFO">${number} = 677</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.972854" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:35.975407" level="INFO">${device-port} = 18506</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:35.974574" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:35.978019" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.012604" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.012876" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:35.977904" elapsed="0.035038"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.013887" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:36.014029" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.013111" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.013064" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:35.977596" elapsed="0.037029">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:35.977205" elapsed="0.037562"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.015656" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18506 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.083967" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.084185" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.015160" elapsed="0.069081"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.084352" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:36.084770" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:35.976768" elapsed="0.108162"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.085498" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:35.975968" elapsed="0.110648"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:35.974049" elapsed="0.112799"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:35.973413" elapsed="0.113544"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.972391" elapsed="0.114690"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:35.971945" elapsed="0.115230"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.088323" level="INFO">${next} = 18507</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.087526" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.089651" level="INFO">${current_port} = 18507</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.088752" elapsed="0.001107"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:35.967050" elapsed="0.122945"/>
</kw>
<msg time="2026-08-15T23:56:36.090080" level="INFO">Repeating keyword, round 678/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.091717" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.091565" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.091538" elapsed="0.000289"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.092305" level="INFO">${current_Date} = 2026-08-15 23:56:36.092</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.092086" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.092999" level="INFO">${ellapsed_seconds} = 2594.245</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.092551" elapsed="0.000485"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.093465" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.093136" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.093109" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.091230" elapsed="0.002410"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.094405" level="INFO">${number} = 678</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.093883" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.096453" level="INFO">${number} = 678</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.095967" elapsed="0.000524"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.099252" level="INFO">${device-port} = 18507</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.098148" elapsed="0.001216"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.102682" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.135905" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.136126" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.102582" elapsed="0.033604"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.137086" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:36.137223" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.136349" elapsed="0.000980">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.136303" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.102297" elapsed="0.035428">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.101719" elapsed="0.036249"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.138835" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18507 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.203573" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.203791" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.138321" elapsed="0.065561"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.204007" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:36.204436" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.101109" elapsed="0.103443"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.205173" elapsed="0.000977"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.100001" elapsed="0.106360"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.097472" elapsed="0.109107"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.096715" elapsed="0.109965"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.095317" elapsed="0.111532"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.094658" elapsed="0.112298"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.208145" level="INFO">${next} = 18508</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.207320" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.209562" level="INFO">${current_port} = 18508</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.208578" elapsed="0.001089"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.090438" elapsed="0.119420"/>
</kw>
<msg time="2026-08-15T23:56:36.209953" level="INFO">Repeating keyword, round 679/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.212606" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.212359" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.212314" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.213533" level="INFO">${current_Date} = 2026-08-15 23:56:36.213</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.213113" elapsed="0.000481"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.214555" level="INFO">${ellapsed_seconds} = 2594.124</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.213964" elapsed="0.000618"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.214909" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.214653" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.214633" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.211758" elapsed="0.003280"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.215571" level="INFO">${number} = 679</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.215183" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.217066" level="INFO">${number} = 679</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.216687" elapsed="0.000411"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.219105" level="INFO">${device-port} = 18508</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.218304" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.221793" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.256323" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.256560" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.221669" elapsed="0.034952"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.257647" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:36.257831" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.256794" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.256745" elapsed="0.001428">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.221315" elapsed="0.037153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.220904" elapsed="0.037709"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.259527" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18508 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.323923" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.324137" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.259011" elapsed="0.065182"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.324306" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:36.324720" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.220463" elapsed="0.104410"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.325482" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.219650" elapsed="0.106993"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.217842" elapsed="0.109039"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.217262" elapsed="0.109727"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.216227" elapsed="0.110889"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.215755" elapsed="0.111456"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.328363" level="INFO">${next} = 18509</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.327563" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.329610" level="INFO">${current_port} = 18509</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.328789" elapsed="0.000882"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.210412" elapsed="0.119343"/>
</kw>
<msg time="2026-08-15T23:56:36.329854" level="INFO">Repeating keyword, round 680/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.331473" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.331315" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.331287" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.332074" level="INFO">${current_Date} = 2026-08-15 23:56:36.332</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.331844" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.332773" level="INFO">${ellapsed_seconds} = 2594.005</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.332322" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.333292" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.332933" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.332907" elapsed="0.000498"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.330977" elapsed="0.002491"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.334213" level="INFO">${number} = 680</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.333672" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.336268" level="INFO">${number} = 680</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.335768" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.339138" level="INFO">${device-port} = 18509</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.337993" elapsed="0.001255"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.342406" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.376033" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.376266" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.342301" elapsed="0.034025"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.377304" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:36.377445" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.376498" elapsed="0.001056">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.376449" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.342024" elapsed="0.035964">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.341565" elapsed="0.036648"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.379097" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18509 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.443824" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.444039" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.378571" elapsed="0.065522"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.444203" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:36.444611" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.341018" elapsed="0.103704"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.445362" elapsed="0.000892"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.339877" elapsed="0.106565"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.337336" elapsed="0.109293"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.336537" elapsed="0.110192"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.335141" elapsed="0.111762"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.334487" elapsed="0.112515"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.448196" level="INFO">${next} = 18510</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.447371" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.449675" level="INFO">${current_port} = 18510</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.448632" elapsed="0.001141"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.330132" elapsed="0.119844"/>
</kw>
<msg time="2026-08-15T23:56:36.450067" level="INFO">Repeating keyword, round 681/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.452969" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.452613" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.452568" elapsed="0.000552"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.453639" level="INFO">${current_Date} = 2026-08-15 23:56:36.454</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.453460" elapsed="0.000207"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.454148" level="INFO">${ellapsed_seconds} = 2593.883</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.453829" elapsed="0.000346"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.454488" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.454245" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.454226" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.452043" elapsed="0.002568"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.455145" level="INFO">${number} = 681</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.454756" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.456613" level="INFO">${number} = 681</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.456241" elapsed="0.000399"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.458669" level="INFO">${device-port} = 18510</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.457867" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.461541" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.495285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.495530" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.461272" elapsed="0.034318"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.496501" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:36.496632" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.495754" elapsed="0.001128">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.495708" elapsed="0.001276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.460981" elapsed="0.036278">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.460465" elapsed="0.036938"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.498277" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18510 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.563924" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.564137" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.497753" elapsed="0.066439"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.564302" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:36.564770" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.460037" elapsed="0.104909"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.565517" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.459216" elapsed="0.107504"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.457386" elapsed="0.109586"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.456840" elapsed="0.110235"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.455776" elapsed="0.111422"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.455328" elapsed="0.111964"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.568437" level="INFO">${next} = 18511</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.567639" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.569875" level="INFO">${current_port} = 18511</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.568956" elapsed="0.001019"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.450568" elapsed="0.119541"/>
</kw>
<msg time="2026-08-15T23:56:36.570194" level="INFO">Repeating keyword, round 682/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.572868" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.572575" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.572525" elapsed="0.000492"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.573552" level="INFO">${current_Date} = 2026-08-15 23:56:36.573</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.573391" elapsed="0.000188"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.574063" level="INFO">${ellapsed_seconds} = 2593.764</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.573727" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.574419" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.574161" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.574142" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.571980" elapsed="0.002568"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.575089" level="INFO">${number} = 682</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.574696" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.576588" level="INFO">${number} = 682</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.576203" elapsed="0.000413"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.578644" level="INFO">${device-port} = 18511</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.577829" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.581392" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.615391" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.615617" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.581137" elapsed="0.034541"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.616678" elapsed="0.000074"/>
</kw>
<msg time="2026-08-15T23:56:36.616872" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.615887" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.615836" elapsed="0.001242">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.580856" elapsed="0.036497">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.580417" elapsed="0.037177"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.618488" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18511 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.684446" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.684691" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.617997" elapsed="0.066755"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.684919" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:36.685360" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.579994" elapsed="0.105484"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.686128" elapsed="0.000955"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.579183" elapsed="0.108102"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.577337" elapsed="0.110148"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.576778" elapsed="0.110815"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.575731" elapsed="0.112003"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.575272" elapsed="0.112610"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.689154" level="INFO">${next} = 18512</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.688288" elapsed="0.000931"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.690572" level="INFO">${current_port} = 18512</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.689604" elapsed="0.001069"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.570654" elapsed="0.120217"/>
</kw>
<msg time="2026-08-15T23:56:36.690969" level="INFO">Repeating keyword, round 683/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.693722" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.693440" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.693395" elapsed="0.000516"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.694636" level="INFO">${current_Date} = 2026-08-15 23:56:36.694</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.694273" elapsed="0.000426"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.695850" level="INFO">${ellapsed_seconds} = 2593.643</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.695085" elapsed="0.000830"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.696705" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.696081" elapsed="0.000789"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.696036" elapsed="0.000893"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.692867" elapsed="0.004172"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.697824" level="INFO">${number} = 683</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.697400" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.699278" level="INFO">${number} = 683</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.698930" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.701265" level="INFO">${device-port} = 18512</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.700479" elapsed="0.000865"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.703963" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.735853" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.736085" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.703864" elapsed="0.032309"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.737141" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:36.737284" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.736346" elapsed="0.001139">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.736298" elapsed="0.001293">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.703413" elapsed="0.034505">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.703018" elapsed="0.035053"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.739017" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18512 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.803831" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.804084" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.738441" elapsed="0.065700"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.804254" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:36.804664" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.702582" elapsed="0.102191"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.805488" elapsed="0.001087"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.701779" elapsed="0.105103"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.700011" elapsed="0.107139"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.699467" elapsed="0.107826"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.698456" elapsed="0.109010"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.698006" elapsed="0.109594"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.809187" level="INFO">${next} = 18513</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.808143" elapsed="0.001126"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.811003" level="INFO">${current_port} = 18513</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.809751" elapsed="0.001383"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.691438" elapsed="0.119871"/>
</kw>
<msg time="2026-08-15T23:56:36.811428" level="INFO">Repeating keyword, round 684/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.813528" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.813386" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.813361" elapsed="0.000251"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.814072" level="INFO">${current_Date} = 2026-08-15 23:56:36.814</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.813868" elapsed="0.000238"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.814709" level="INFO">${ellapsed_seconds} = 2593.523</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.814302" elapsed="0.000443"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.815171" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.814855" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.814829" elapsed="0.000447"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.813078" elapsed="0.002259"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.816043" level="INFO">${number} = 684</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.815532" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.817937" level="INFO">${number} = 684</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.817479" elapsed="0.000493"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.820505" level="INFO">${device-port} = 18513</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.819462" elapsed="0.001146"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.824100" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.851908" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.852131" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.823982" elapsed="0.028207"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.853105" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:36.853244" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.852357" elapsed="0.000994">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.852311" elapsed="0.001133">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.823487" elapsed="0.030236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.822789" elapsed="0.031174"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.854829" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18513 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:36.919959" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.920165" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.854323" elapsed="0.065897"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:36.920330" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:36.920726" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.822274" elapsed="0.098605"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:36.921440" elapsed="0.000872"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.821212" elapsed="0.101288"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.818882" elapsed="0.103806"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.818183" elapsed="0.104604"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.816892" elapsed="0.106069"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.816283" elapsed="0.106776"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.924233" level="INFO">${next} = 18514</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.923404" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.925569" level="INFO">${current_port} = 18514</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:36.924654" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.812136" elapsed="0.113657"/>
</kw>
<msg time="2026-08-15T23:56:36.925947" level="INFO">Repeating keyword, round 685/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:36.928478" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:36.928214" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.928172" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.929337" level="INFO">${current_Date} = 2026-08-15 23:56:36.929</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:36.928994" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:36.930440" level="INFO">${ellapsed_seconds} = 2593.408</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:36.929737" elapsed="0.000760"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.931205" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:36.930654" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:36.930613" elapsed="0.000768"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:36.927633" elapsed="0.003850"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.932518" level="INFO">${number} = 685</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.931884" elapsed="0.000660"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.933976" level="INFO">${number} = 685</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.933618" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:36.935960" level="INFO">${device-port} = 18514</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:36.935157" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.938650" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:36.967863" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:36.968084" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.938555" elapsed="0.029587"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:36.969039" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:36.969173" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:36.968307" elapsed="0.001041">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:36.968262" elapsed="0.001183">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:36.938277" elapsed="0.031438">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:36.937696" elapsed="0.032192"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:36.970709" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18514 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.035852" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.036062" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:36.970234" elapsed="0.065882"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.036225" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:37.036621" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:36.937274" elapsed="0.099456"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.037330" elapsed="0.000869"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:36.936475" elapsed="0.101916"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:36.934685" elapsed="0.103892"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:36.934165" elapsed="0.104513"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.933168" elapsed="0.105672"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:36.932698" elapsed="0.106245"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.040102" level="INFO">${next} = 18515</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.039286" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.041414" level="INFO">${current_port} = 18515</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.040523" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:36.926381" elapsed="0.115256"/>
</kw>
<msg time="2026-08-15T23:56:37.041722" level="INFO">Repeating keyword, round 686/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.044283" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.044041" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.043998" elapsed="0.000448"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.045512" level="INFO">${current_Date} = 2026-08-15 23:56:37.045</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.045097" elapsed="0.000454"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.046130" level="INFO">${ellapsed_seconds} = 2593.292</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.045739" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.046544" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.046257" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.046235" elapsed="0.000418"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.043477" elapsed="0.003231"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.047312" level="INFO">${number} = 686</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.046901" elapsed="0.000448"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.049223" level="INFO">${number} = 686</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.048837" elapsed="0.000417"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.051559" level="INFO">${device-port} = 18515</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.050602" elapsed="0.001048"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.057475" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.087856" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.088078" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.057373" elapsed="0.030764"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.089079" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:37.089216" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.088306" elapsed="0.001017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.088258" elapsed="0.001158">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.057082" elapsed="0.032607">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.053661" elapsed="0.036278"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.090770" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18515 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.156037" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.156244" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.090289" elapsed="0.066010"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.156409" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:37.156895" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.053172" elapsed="0.103838"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.157601" elapsed="0.000936"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.052197" elapsed="0.106540"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.050079" elapsed="0.108916"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.049450" elapsed="0.109652"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.048092" elapsed="0.111178"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.047556" elapsed="0.111818"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.160552" level="INFO">${next} = 18516</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.159721" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.162009" level="INFO">${current_port} = 18516</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.161031" elapsed="0.001079"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.042207" elapsed="0.120138"/>
</kw>
<msg time="2026-08-15T23:56:37.162444" level="INFO">Repeating keyword, round 687/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.164403" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.164253" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.164227" elapsed="0.000264"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.164959" level="INFO">${current_Date} = 2026-08-15 23:56:37.165</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.164691" elapsed="0.000306"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.165662" level="INFO">${ellapsed_seconds} = 2593.172</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.165213" elapsed="0.000485"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.166153" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.165796" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.165770" elapsed="0.000495"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.163922" elapsed="0.002418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.167090" level="INFO">${number} = 687</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.166554" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.169173" level="INFO">${number} = 687</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.168674" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.171854" level="INFO">${device-port} = 18516</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.170869" elapsed="0.001068"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.174559" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.207736" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.208013" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.174462" elapsed="0.033612"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.208968" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:37.209101" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.208237" elapsed="0.001042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.208192" elapsed="0.001188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.174014" elapsed="0.035635">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.173605" elapsed="0.036185"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.210647" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18516 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.276166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.276401" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.210167" elapsed="0.066303"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.276586" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:37.277062" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.173190" elapsed="0.103983"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.277743" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.172378" elapsed="0.106544"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.170213" elapsed="0.108918"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.169435" elapsed="0.109798"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.168049" elapsed="0.111309"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.167359" elapsed="0.112094"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.280652" level="INFO">${next} = 18517</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.279797" elapsed="0.000921"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.282088" level="INFO">${current_port} = 18517</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.281144" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.162939" elapsed="0.119397"/>
</kw>
<msg time="2026-08-15T23:56:37.282425" level="INFO">Repeating keyword, round 688/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.285062" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.284761" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.284718" elapsed="0.000509"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.286063" level="INFO">${current_Date} = 2026-08-15 23:56:37.286</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.285649" elapsed="0.000483"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.287323" level="INFO">${ellapsed_seconds} = 2593.051</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.286489" elapsed="0.000880"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.287692" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.287442" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.287423" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.284204" elapsed="0.003632"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.288357" level="INFO">${number} = 688</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.287988" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.289824" level="INFO">${number} = 688</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.289469" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.291844" level="INFO">${device-port} = 18517</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.291032" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.294585" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.327833" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.328070" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.294318" elapsed="0.033812"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.329043" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:37.329180" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.328299" elapsed="0.000986">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.328253" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.294036" elapsed="0.035611">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.293622" elapsed="0.036258"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.330723" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18517 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.395997" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.396218" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.330234" elapsed="0.066041"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.396405" elapsed="0.000105"/>
</return>
<msg time="2026-08-15T23:56:37.396926" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.293206" elapsed="0.103841"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.397619" elapsed="0.000972"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.292372" elapsed="0.106542"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.290537" elapsed="0.108584"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.290014" elapsed="0.109210"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.289021" elapsed="0.110330"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.288553" elapsed="0.110894"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.400612" level="INFO">${next} = 18518</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.399797" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.402049" level="INFO">${current_port} = 18518</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.401086" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.282926" elapsed="0.119356"/>
</kw>
<msg time="2026-08-15T23:56:37.402386" level="INFO">Repeating keyword, round 689/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.404546" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.404347" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.404319" elapsed="0.000319"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.405099" level="INFO">${current_Date} = 2026-08-15 23:56:37.405</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.404874" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.405789" level="INFO">${ellapsed_seconds} = 2592.932</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.405351" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.406282" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.405949" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.405922" elapsed="0.000472"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.403983" elapsed="0.002474"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.407224" level="INFO">${number} = 689</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.406681" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.409244" level="INFO">${number} = 689</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.408748" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.412081" level="INFO">${device-port} = 18518</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.410947" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.415765" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.447902" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.448135" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.415665" elapsed="0.032531"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.449123" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:37.449260" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.448366" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.448318" elapsed="0.001241">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.415296" elapsed="0.034664">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.414638" elapsed="0.035476"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.451037" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18518 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.516269" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.516533" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.450474" elapsed="0.066123"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.516712" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:37.517177" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.414008" elapsed="0.103279"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.517891" elapsed="0.000943"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.412861" elapsed="0.106190"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.410261" elapsed="0.108984"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.409504" elapsed="0.109845"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.408125" elapsed="0.111351"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.407478" elapsed="0.112094"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.520879" level="INFO">${next} = 18519</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.520036" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.522223" level="INFO">${current_port} = 18519</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.521314" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.402974" elapsed="0.119509"/>
</kw>
<msg time="2026-08-15T23:56:37.522572" level="INFO">Repeating keyword, round 690/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.525355" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.525105" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.525060" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.526450" level="INFO">${current_Date} = 2026-08-15 23:56:37.526</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.526012" elapsed="0.000505"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.527555" level="INFO">${ellapsed_seconds} = 2592.811</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.526897" elapsed="0.000688"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.527930" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.527657" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.527638" elapsed="0.000378"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.524490" elapsed="0.003573"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.528592" level="INFO">${number} = 690</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.528212" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.530091" level="INFO">${number} = 690</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.529722" elapsed="0.000397"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.532180" level="INFO">${device-port} = 18519</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.531346" elapsed="0.000915"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.534970" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.567487" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.567717" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.534853" elapsed="0.032925"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.568726" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:37.568897" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.568011" elapsed="0.000996">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.567959" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.534530" elapsed="0.034866">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.534095" elapsed="0.035552"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.570579" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18519 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.635783" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.636031" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.570043" elapsed="0.066045"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.636198" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:37.636630" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.533631" elapsed="0.103109"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.637347" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.532750" elapsed="0.105699"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.530868" elapsed="0.107773"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.530283" elapsed="0.108458"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.529268" elapsed="0.109647"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.528778" elapsed="0.110235"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.640152" level="INFO">${next} = 18520</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.639360" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.641476" level="INFO">${current_port} = 18520</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.640576" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.523083" elapsed="0.118617"/>
</kw>
<msg time="2026-08-15T23:56:37.641787" level="INFO">Repeating keyword, round 691/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.644383" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.644142" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.644097" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.645238" level="INFO">${current_Date} = 2026-08-15 23:56:37.645</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.644885" elapsed="0.000415"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.646432" level="INFO">${ellapsed_seconds} = 2592.692</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.645633" elapsed="0.000843"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.646824" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.646566" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.646545" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.643573" elapsed="0.003377"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.647470" level="INFO">${number} = 691</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.647096" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.648922" level="INFO">${number} = 691</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.648567" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.651011" level="INFO">${device-port} = 18520</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.650124" elapsed="0.000969"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.653559" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.684091" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.684319" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.653456" elapsed="0.030926"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.685308" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:37.685443" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.684554" elapsed="0.001083">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.684506" elapsed="0.001231">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.653174" elapsed="0.032908">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.652762" elapsed="0.033478"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.687165" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18520 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.752013" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.752227" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.686623" elapsed="0.065659"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.752392" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:37.752796" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.652339" elapsed="0.100622"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.753539" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.651535" elapsed="0.103155"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.649631" elapsed="0.105303"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.649109" elapsed="0.106089"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.648114" elapsed="0.107212"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.647651" elapsed="0.107771"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.756566" level="INFO">${next} = 18521</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.755773" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.757973" level="INFO">${current_port} = 18521</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.757036" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.642309" elapsed="0.115896"/>
</kw>
<msg time="2026-08-15T23:56:37.758291" level="INFO">Repeating keyword, round 692/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.760863" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.760585" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.760542" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.761774" level="INFO">${current_Date} = 2026-08-15 23:56:37.762</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.761419" elapsed="0.000487"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.762761" level="INFO">${ellapsed_seconds} = 2592.575</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.762253" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.763256" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.762920" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.762893" elapsed="0.000473"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.760054" elapsed="0.003376"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.764170" level="INFO">${number} = 692</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.763635" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.766210" level="INFO">${number} = 692</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.765687" elapsed="0.000561"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.769122" level="INFO">${device-port} = 18521</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.767884" elapsed="0.001352"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.772771" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.799862" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.800086" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.772631" elapsed="0.027513"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.801046" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:37.801183" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.800309" elapsed="0.000982">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.800263" elapsed="0.001120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.772246" elapsed="0.029411">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.771622" elapsed="0.030346"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.802843" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18521 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.867963" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.868178" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.802328" elapsed="0.065906"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.868345" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:37.868752" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.771043" elapsed="0.097863"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.869475" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.769903" elapsed="0.100700"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.767237" elapsed="0.103554"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.766475" elapsed="0.104466"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.765068" elapsed="0.105996"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.764424" elapsed="0.106736"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.872291" level="INFO">${next} = 18522</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.871508" elapsed="0.000842"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.873605" level="INFO">${current_port} = 18522</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.872711" elapsed="0.001207"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.758726" elapsed="0.115327"/>
</kw>
<msg time="2026-08-15T23:56:37.874141" level="INFO">Repeating keyword, round 693/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.876653" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.876408" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.876365" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.877509" level="INFO">${current_Date} = 2026-08-15 23:56:37.877</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.877160" elapsed="0.000409"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.878595" level="INFO">${ellapsed_seconds} = 2592.46</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.877992" elapsed="0.000630"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.878946" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.878692" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.878673" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.875872" elapsed="0.003199"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.879579" level="INFO">${number} = 693</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.879215" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.881027" level="INFO">${number} = 693</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.880665" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.883037" level="INFO">${device-port} = 18522</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.882233" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.885882" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:37.915882" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.916110" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.885593" elapsed="0.030596"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.917126" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:37.917262" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:37.916369" elapsed="0.001086">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:37.916322" elapsed="0.001286">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:37.885313" elapsed="0.032613">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:37.884906" elapsed="0.033166"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:37.918933" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18522 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:37.984166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:37.984404" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:37.918418" elapsed="0.066043"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:37.984578" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:37.985051" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:37.884441" elapsed="0.100723"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:37.985767" elapsed="0.000934"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:37.883562" elapsed="0.103375"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.881756" elapsed="0.105375"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.881210" elapsed="0.106022"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.880213" elapsed="0.107143"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.879757" elapsed="0.107694"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.988609" level="INFO">${next} = 18523</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.987842" elapsed="0.000828"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.990033" level="INFO">${current_port} = 18523</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:37.989084" elapsed="0.001048"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.874566" elapsed="0.115696"/>
</kw>
<msg time="2026-08-15T23:56:37.990351" level="INFO">Repeating keyword, round 694/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:37.991999" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:37.991839" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.991789" elapsed="0.000300"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.992566" level="INFO">${current_Date} = 2026-08-15 23:56:37.992</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:37.992343" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:37.993271" level="INFO">${ellapsed_seconds} = 2592.345</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:37.992833" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:37.993918" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:37.993427" elapsed="0.000572"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:37.993381" elapsed="0.000652"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:37.991484" elapsed="0.002613"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.994893" level="INFO">${number} = 694</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.994301" elapsed="0.000630"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.996922" level="INFO">${number} = 694</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.996422" elapsed="0.000545"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:37.999700" level="INFO">${device-port} = 18523</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:37.998595" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.003282" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.085992" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.086239" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.003034" elapsed="0.083299"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.087398" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:38.087556" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.086562" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.086506" elapsed="0.001257">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.002683" elapsed="0.085433">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.002204" elapsed="0.086141"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.089321" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18523 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.156251" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.156491" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.088729" elapsed="0.067818"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.156668" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:56:38.157205" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.001596" elapsed="0.155724"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.157958" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.000452" elapsed="0.158629"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:37.997962" elapsed="0.161336"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:37.997188" elapsed="0.162216"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.995770" elapsed="0.163759"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:37.995148" elapsed="0.164481"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.160903" level="INFO">${next} = 18524</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.160061" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.162283" level="INFO">${current_port} = 18524</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.161369" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:37.990669" elapsed="0.171843"/>
</kw>
<msg time="2026-08-15T23:56:38.162601" level="INFO">Repeating keyword, round 695/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.165618" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.165483" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.165428" elapsed="0.000257"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.166026" level="INFO">${current_Date} = 2026-08-15 23:56:38.166</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.165856" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.166598" level="INFO">${ellapsed_seconds} = 2592.171</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.166203" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.166967" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.166696" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.166677" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.164716" elapsed="0.002376"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.167602" level="INFO">${number} = 695</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.167237" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.169107" level="INFO">${number} = 695</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.168726" elapsed="0.000408"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.171359" level="INFO">${device-port} = 18524</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.170377" elapsed="0.001068"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.174677" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.211976" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.212213" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.174529" elapsed="0.037743"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.213281" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:38.213420" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.212449" elapsed="0.001171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.212400" elapsed="0.001318">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.173905" elapsed="0.040130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.173262" elapsed="0.040920"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.215093" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18524 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.280321" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.280584" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.214534" elapsed="0.066108"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.280769" elapsed="0.000164"/>
</return>
<msg time="2026-08-15T23:56:38.281298" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.172758" elapsed="0.108653"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.282086" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.171932" elapsed="0.111346"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.169899" elapsed="0.113575"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.169298" elapsed="0.114281"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.168275" elapsed="0.115428"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.167783" elapsed="0.116060"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.285101" level="INFO">${next} = 18525</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.284204" elapsed="0.000960"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.286451" level="INFO">${current_port} = 18525</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.285532" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.163260" elapsed="0.123419"/>
</kw>
<msg time="2026-08-15T23:56:38.286766" level="INFO">Repeating keyword, round 696/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.289499" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.289246" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.289202" elapsed="0.000377"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.289958" level="INFO">${current_Date} = 2026-08-15 23:56:38.290</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.289772" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.290471" level="INFO">${ellapsed_seconds} = 2592.047</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.290135" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.290835" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.290568" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.290549" elapsed="0.000367"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.288619" elapsed="0.002343"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.291473" level="INFO">${number} = 696</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.291108" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.292955" level="INFO">${number} = 696</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.292577" elapsed="0.000410"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.294953" level="INFO">${device-port} = 18525</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.294155" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.297690" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.331992" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.332224" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.297593" elapsed="0.034698"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.333232" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:38.333377" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.332456" elapsed="0.001045">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.332411" elapsed="0.001181">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.297318" elapsed="0.036584">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.296717" elapsed="0.037395"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.334973" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18525 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.400153" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.400404" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.334462" elapsed="0.066012"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.400734" elapsed="0.000129"/>
</return>
<msg time="2026-08-15T23:56:38.401239" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.296297" elapsed="0.105050"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.402018" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.295479" elapsed="0.107627"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.293678" elapsed="0.109620"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.293147" elapsed="0.110254"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.292128" elapsed="0.111396"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.291662" elapsed="0.111961"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.404924" level="INFO">${next} = 18526</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.404039" elapsed="0.000952"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.406350" level="INFO">${current_port} = 18526</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.405381" elapsed="0.001072"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.287290" elapsed="0.119310"/>
</kw>
<msg time="2026-08-15T23:56:38.406708" level="INFO">Repeating keyword, round 697/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.409564" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.409338" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.409284" elapsed="0.000372"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.410119" level="INFO">${current_Date} = 2026-08-15 23:56:38.410</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.409891" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.410826" level="INFO">${ellapsed_seconds} = 2591.927</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.410364" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.411298" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.410965" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.410939" elapsed="0.000470"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.408714" elapsed="0.002757"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.412236" level="INFO">${number} = 697</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.411672" elapsed="0.000602"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.414297" level="INFO">${number} = 697</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.413794" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.417202" level="INFO">${device-port} = 18526</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.416041" elapsed="0.001273"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.421254" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.451760" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.452043" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.421111" elapsed="0.030995"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.453060" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:38.453196" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.452276" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.452229" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.420529" elapsed="0.033301">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.419673" elapsed="0.034312"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.454879" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18526 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.520019" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.520248" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.454337" elapsed="0.066044"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.520535" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:38.521007" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.419085" elapsed="0.102034"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.521718" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.417961" elapsed="0.104892"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.415309" elapsed="0.107741"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.414561" elapsed="0.108589"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.413173" elapsed="0.110118"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.412491" elapsed="0.110895"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.524562" level="INFO">${next} = 18527</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.523728" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.525940" level="INFO">${current_port} = 18527</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.525044" elapsed="0.000993"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.407240" elapsed="0.118926"/>
</kw>
<msg time="2026-08-15T23:56:38.526251" level="INFO">Repeating keyword, round 698/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.528859" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.528583" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.528539" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.529769" level="INFO">${current_Date} = 2026-08-15 23:56:38.530</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.529414" elapsed="0.000445"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.530907" level="INFO">${ellapsed_seconds} = 2591.807</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.530193" elapsed="0.000775"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.531652" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.531125" elapsed="0.000650"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.531084" elapsed="0.000778"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.528016" elapsed="0.003951"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.533210" level="INFO">${number} = 698</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.532293" elapsed="0.000978"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.535343" level="INFO">${number} = 698</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.534864" elapsed="0.000517"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.538022" level="INFO">${device-port} = 18527</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.537070" elapsed="0.001034"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.543131" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.571664" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.571923" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.543030" elapsed="0.028954"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.572919" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:38.573053" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.572150" elapsed="0.001009">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.572103" elapsed="0.001147">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.542692" elapsed="0.030835">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.539759" elapsed="0.033977"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.574611" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18527 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.643907" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.644146" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.574118" elapsed="0.070085"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.644311" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:38.644717" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.539342" elapsed="0.105528"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.645431" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.538544" elapsed="0.107955"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.536406" elapsed="0.110279"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.535601" elapsed="0.111183"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.534211" elapsed="0.112745"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.533564" elapsed="0.113490"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.648232" level="INFO">${next} = 18528</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.647393" elapsed="0.000903"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.649116" level="INFO">${current_port} = 18528</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.648551" elapsed="0.000624"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.526691" elapsed="0.122563"/>
</kw>
<msg time="2026-08-15T23:56:38.649322" level="INFO">Repeating keyword, round 699/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.650988" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.650834" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.650787" elapsed="0.000289"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.651497" level="INFO">${current_Date} = 2026-08-15 23:56:38.651</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.651279" elapsed="0.000254"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.652205" level="INFO">${ellapsed_seconds} = 2591.686</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.651739" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.652668" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.652341" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.652315" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.650485" elapsed="0.002378"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.653572" level="INFO">${number} = 699</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.653066" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.655566" level="INFO">${number} = 699</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.655098" elapsed="0.000505"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.658382" level="INFO">${device-port} = 18528</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.657271" elapsed="0.001224"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.661896" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.696140" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.696291" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.661754" elapsed="0.034575"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.696944" elapsed="0.000039"/>
</kw>
<msg time="2026-08-15T23:56:38.697033" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.696439" elapsed="0.000744">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.696408" elapsed="0.000840">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.661307" elapsed="0.036124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.660911" elapsed="0.036611"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.698087" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18528 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.764174" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.764533" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.697742" elapsed="0.066855"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.764759" elapsed="0.000166"/>
</return>
<msg time="2026-08-15T23:56:38.765362" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.660346" elapsed="0.105140"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.766222" elapsed="0.001080"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.659142" elapsed="0.108444"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.656612" elapsed="0.111266"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.655844" elapsed="0.112244"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.654462" elapsed="0.113772"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.653843" elapsed="0.114496"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.769788" level="INFO">${next} = 18529</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.768727" elapsed="0.001196"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.771417" level="INFO">${current_port} = 18529</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.770421" elapsed="0.001091"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.649608" elapsed="0.122038"/>
</kw>
<msg time="2026-08-15T23:56:38.771734" level="INFO">Repeating keyword, round 700/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.774417" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.774158" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.774112" elapsed="0.000456"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.775389" level="INFO">${current_Date} = 2026-08-15 23:56:38.775</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.775027" elapsed="0.000420"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.776532" level="INFO">${ellapsed_seconds} = 2591.562</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.775785" elapsed="0.000775"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.776918" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.776634" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.776615" elapsed="0.000384"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.773595" elapsed="0.003451"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.777576" level="INFO">${number} = 700</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.777193" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.779058" level="INFO">${number} = 700</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.778692" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.781119" level="INFO">${device-port} = 18529</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.780302" elapsed="0.000901"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.784182" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.811631" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.811763" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.783762" elapsed="0.028029"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.812324" elapsed="0.000027"/>
</kw>
<msg time="2026-08-15T23:56:38.812391" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.811935" elapsed="0.000512">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.811901" elapsed="0.000593">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.783478" elapsed="0.029166">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.783073" elapsed="0.029700"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.813202" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18529 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.879522" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.879665" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.812966" elapsed="0.066739"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:38.879774" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:38.880044" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.782635" elapsed="0.097459"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:38.880386" elapsed="0.000489"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.781831" elapsed="0.099133"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.779834" elapsed="0.101221"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.779248" elapsed="0.101856"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.778239" elapsed="0.102925"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.777761" elapsed="0.103449"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.881739" level="INFO">${next} = 18530</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.881370" elapsed="0.000396"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.882360" level="INFO">${current_port} = 18530</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:38.881956" elapsed="0.000447"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.772273" elapsed="0.110189"/>
</kw>
<msg time="2026-08-15T23:56:38.882503" level="INFO">Repeating keyword, round 701/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:38.883728" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:38.883596" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.883575" elapsed="0.000219"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.884148" level="INFO">${current_Date} = 2026-08-15 23:56:38.884</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:38.883975" elapsed="0.000200"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:38.884656" level="INFO">${ellapsed_seconds} = 2591.453</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:38.884325" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.885033" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:38.884754" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:38.884734" elapsed="0.000378"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:38.883352" elapsed="0.001806"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.885667" level="INFO">${number} = 701</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.885303" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.887235" level="INFO">${number} = 701</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.886884" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:38.889266" level="INFO">${device-port} = 18530</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:38.888455" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.891936" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:38.931347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.931576" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.891754" elapsed="0.039910"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:38.932594" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:38.932729" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:38.931869" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:38.931784" elapsed="0.001313">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:38.891460" elapsed="0.041923">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:38.891068" elapsed="0.042458"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:38.934391" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18530 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:38.999704" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:38.999992" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:38.933903" elapsed="0.066198"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.000268" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:56:39.000930" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:38.890629" elapsed="0.110430"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.001656" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:38.889793" elapsed="0.112959"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:38.888003" elapsed="0.114987"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:38.887426" elapsed="0.115665"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.886324" elapsed="0.116893"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:38.885871" elapsed="0.117441"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.004506" level="INFO">${next} = 18531</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.003710" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.005881" level="INFO">${current_port} = 18531</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.004969" elapsed="0.001007"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:38.882723" elapsed="0.123380"/>
</kw>
<msg time="2026-08-15T23:56:39.006188" level="INFO">Repeating keyword, round 702/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.008732" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.008493" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.008450" elapsed="0.000455"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.009688" level="INFO">${current_Date} = 2026-08-15 23:56:39.009</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.009311" elapsed="0.000438"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.010846" level="INFO">${ellapsed_seconds} = 2591.328</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.010117" elapsed="0.000790"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.011653" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.011063" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.011023" elapsed="0.000844"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.007966" elapsed="0.004006"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.012711" level="INFO">${number} = 702</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.012313" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.014175" level="INFO">${number} = 702</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.013830" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.016210" level="INFO">${device-port} = 18531</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.015384" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.018842" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.047981" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.048335" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.018707" elapsed="0.029697"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.049611" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:39.049766" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.048650" elapsed="0.001270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.048576" elapsed="0.001450">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.018424" elapsed="0.031925">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.018023" elapsed="0.032592"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.051692" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18531 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.115854" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.116183" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.051065" elapsed="0.065175"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.116388" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:56:39.116928" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.017562" elapsed="0.099481"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.117661" elapsed="0.001012"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.016735" elapsed="0.102171"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.014929" elapsed="0.104172"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.014365" elapsed="0.104840"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.013364" elapsed="0.106022"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.012912" elapsed="0.106641"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.120864" level="INFO">${next} = 18532</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.120022" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.122218" level="INFO">${current_port} = 18532</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.121294" elapsed="0.001018"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.006619" elapsed="0.115820"/>
</kw>
<msg time="2026-08-15T23:56:39.122526" level="INFO">Repeating keyword, round 703/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.125006" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.124834" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.124781" elapsed="0.000323"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.125563" level="INFO">${current_Date} = 2026-08-15 23:56:39.125</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.125323" elapsed="0.000280"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.126318" level="INFO">${ellapsed_seconds} = 2591.212</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.125844" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.126844" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.126461" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.126434" elapsed="0.000532"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.124447" elapsed="0.002587"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.127835" level="INFO">${number} = 703</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.127270" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.129990" level="INFO">${number} = 703</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.129464" elapsed="0.000565"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.132969" level="INFO">${device-port} = 18532</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.131761" elapsed="0.001326"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.136675" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.167603" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.167952" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.136565" elapsed="0.031467"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.169158" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:39.169309" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.168231" elapsed="0.001304">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.168173" elapsed="0.001466">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.136238" elapsed="0.033737">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.135596" elapsed="0.034549"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.171303" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18532 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.239914" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.240136" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.170621" elapsed="0.069570"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.240311" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:39.240757" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.134945" elapsed="0.105969"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.241491" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.133738" elapsed="0.108911"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.131088" elapsed="0.111805"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.130273" elapsed="0.112730"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.128773" elapsed="0.114410"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.128108" elapsed="0.115175"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.244457" level="INFO">${next} = 18533</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.243633" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.245877" level="INFO">${current_port} = 18533</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.244928" elapsed="0.001048"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.123021" elapsed="0.123086"/>
</kw>
<msg time="2026-08-15T23:56:39.246194" level="INFO">Repeating keyword, round 704/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.248514" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.248355" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.248327" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.249130" level="INFO">${current_Date} = 2026-08-15 23:56:39.249</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.248893" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.249857" level="INFO">${ellapsed_seconds} = 2591.088</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.249383" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.250350" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.250001" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.249975" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.248009" elapsed="0.002526"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.251331" level="INFO">${number} = 704</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.250749" elapsed="0.000620"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.253413" level="INFO">${number} = 704</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.252923" elapsed="0.000528"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.256284" level="INFO">${device-port} = 18533</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.255159" elapsed="0.001242"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.259965" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.295868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.296091" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.259855" elapsed="0.036295"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.297060" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:39.297198" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.296318" elapsed="0.000988">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.296271" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.259528" elapsed="0.038150">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.258919" elapsed="0.039077"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.298970" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18533 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.365504" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.365988" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.298379" elapsed="0.067690"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.366260" elapsed="0.000136"/>
</return>
<msg time="2026-08-15T23:56:39.366948" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.258295" elapsed="0.108801"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.367877" elapsed="0.001172"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.257094" elapsed="0.112162"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.254465" elapsed="0.114994"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.253686" elapsed="0.115884"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.252256" elapsed="0.117448"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.251591" elapsed="0.118257"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.371150" level="INFO">${next} = 18534</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.370219" elapsed="0.000995"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.372638" level="INFO">${current_port} = 18534</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.371605" elapsed="0.001139"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.246640" elapsed="0.126297"/>
</kw>
<msg time="2026-08-15T23:56:39.373034" level="INFO">Repeating keyword, round 705/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.375788" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.375662" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.375635" elapsed="0.000240"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.376219" level="INFO">${current_Date} = 2026-08-15 23:56:39.376</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.376033" elapsed="0.000214"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.376760" level="INFO">${ellapsed_seconds} = 2590.961</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.376404" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.377150" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.376874" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.376854" elapsed="0.000375"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.375195" elapsed="0.002079"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.377785" level="INFO">${number} = 705</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.377419" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.379280" level="INFO">${number} = 705</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.378931" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.381306" level="INFO">${device-port} = 18534</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.380495" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.385109" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.415939" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.416165" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.384448" elapsed="0.031776"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.417156" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:39.417293" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.416389" elapsed="0.001145">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.416342" elapsed="0.001309">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.383731" elapsed="0.034275">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.383129" elapsed="0.035030"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.419101" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18534 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.484079" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.484321" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.418512" elapsed="0.065866"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.484500" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:39.484986" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.382636" elapsed="0.102465"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.485691" elapsed="0.000990"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.381848" elapsed="0.105079"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.380042" elapsed="0.107085"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.379467" elapsed="0.107765"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.378439" elapsed="0.108918"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.377986" elapsed="0.109467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.488605" level="INFO">${next} = 18535</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.487837" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.490026" level="INFO">${current_port} = 18535</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.489088" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.373580" elapsed="0.116677"/>
</kw>
<msg time="2026-08-15T23:56:39.490345" level="INFO">Repeating keyword, round 706/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.493143" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.492730" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.492686" elapsed="0.000616"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.493846" level="INFO">${current_Date} = 2026-08-15 23:56:39.494</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.493652" elapsed="0.000224"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.494375" level="INFO">${ellapsed_seconds} = 2590.843</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.494031" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.494758" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.494477" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.494458" elapsed="0.000449"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.492181" elapsed="0.002774"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.495486" level="INFO">${number} = 706</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.495105" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.496979" level="INFO">${number} = 706</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.496615" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.499074" level="INFO">${device-port} = 18535</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.498202" elapsed="0.000955"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.501894" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.536269" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.536510" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.501610" elapsed="0.034962"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.537541" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:39.537687" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.536761" elapsed="0.001083">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.536709" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.501329" elapsed="0.036918">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.500926" elapsed="0.037538"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.539413" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18535 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.603718" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.603972" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.538910" elapsed="0.065119"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.604143" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:56:39.604571" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.500470" elapsed="0.104213"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.605310" elapsed="0.000894"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.499617" elapsed="0.106837"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.497714" elapsed="0.108938"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.497172" elapsed="0.109582"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.496154" elapsed="0.110775"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.495673" elapsed="0.111352"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.608206" level="INFO">${next} = 18536</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.607395" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.609593" level="INFO">${current_port} = 18536</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.608651" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.490864" elapsed="0.119030"/>
</kw>
<msg time="2026-08-15T23:56:39.609988" level="INFO">Repeating keyword, round 707/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.612614" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.612348" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.612305" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.613510" level="INFO">${current_Date} = 2026-08-15 23:56:39.613</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.613137" elapsed="0.000439"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.614724" level="INFO">${ellapsed_seconds} = 2590.724</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.613948" elapsed="0.000838"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.615542" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.614987" elapsed="0.000626"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.614942" elapsed="0.000701"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.611775" elapsed="0.003915"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.616230" level="INFO">${number} = 707</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.615858" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.617715" level="INFO">${number} = 707</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.617359" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.619755" level="INFO">${device-port} = 18536</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.618959" elapsed="0.000897"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.622538" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.652360" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.652638" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.622430" elapsed="0.030269"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.653844" elapsed="0.000072"/>
</kw>
<msg time="2026-08-15T23:56:39.654009" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.652947" elapsed="0.001427">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.652886" elapsed="0.001615">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.621983" elapsed="0.032869">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.621545" elapsed="0.033501"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.655871" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18536 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.723938" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.724149" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.655494" elapsed="0.068710"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.724319" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:39.724746" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.621126" elapsed="0.103779"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.725469" elapsed="0.000989"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.620299" elapsed="0.106356"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.618471" elapsed="0.108422"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.617918" elapsed="0.109081"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.616904" elapsed="0.110220"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.616416" elapsed="0.110804"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.728382" level="INFO">${next} = 18537</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.727568" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.729741" level="INFO">${current_port} = 18537</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.728849" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.610464" elapsed="0.119577"/>
</kw>
<msg time="2026-08-15T23:56:39.730128" level="INFO">Repeating keyword, round 708/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.732788" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.732525" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.732470" elapsed="0.000494"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.733736" level="INFO">${current_Date} = 2026-08-15 23:56:39.734</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.733370" elapsed="0.000425"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.734752" level="INFO">${ellapsed_seconds} = 2590.603</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.734229" elapsed="0.000549"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.735125" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.734866" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.734847" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.731979" elapsed="0.003271"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.735759" level="INFO">${number} = 708</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.735397" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.737213" level="INFO">${number} = 708</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.736868" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.739249" level="INFO">${device-port} = 18537</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.738444" elapsed="0.000887"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.741988" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.776397" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.776635" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.741887" elapsed="0.034807"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.777660" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:39.777797" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.776921" elapsed="0.001018">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.776867" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.741585" elapsed="0.036789">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.741022" elapsed="0.037544"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.779125" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18537 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.844135" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.844362" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.778792" elapsed="0.065628"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.844544" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:39.845042" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.740582" elapsed="0.104587"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.845766" elapsed="0.001088"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.739778" elapsed="0.107277"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.737962" elapsed="0.109316"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.737407" elapsed="0.109984"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.736405" elapsed="0.111117"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.735959" elapsed="0.111665"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.848886" level="INFO">${next} = 18538</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.848024" elapsed="0.000926"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.850375" level="INFO">${current_port} = 18538</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.849320" elapsed="0.001141"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.730635" elapsed="0.119913"/>
</kw>
<msg time="2026-08-15T23:56:39.850605" level="INFO">Repeating keyword, round 709/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.852295" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.852129" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.852102" elapsed="0.000283"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.852850" level="INFO">${current_Date} = 2026-08-15 23:56:39.853</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.852593" elapsed="0.000302"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.853570" level="INFO">${ellapsed_seconds} = 2590.484</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.853109" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.854102" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.853712" elapsed="0.000470"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.853678" elapsed="0.000537"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.851765" elapsed="0.002513"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.855025" level="INFO">${number} = 709</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.854487" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.857056" level="INFO">${number} = 709</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.856563" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.859896" level="INFO">${device-port} = 18538</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.858749" elapsed="0.001261"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.863772" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:39.895933" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.896186" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.863633" elapsed="0.032617"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.897268" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:39.897413" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:39.896435" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:39.896384" elapsed="0.001341">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.863235" elapsed="0.034892">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.862367" elapsed="0.035921"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.898891" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18538 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:39.963930" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:39.964158" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.898563" elapsed="0.065653"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:39.964345" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:56:39.964937" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.861733" elapsed="0.103335"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:39.965650" elapsed="0.000915"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.860621" elapsed="0.106133"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.858129" elapsed="0.108866"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.857315" elapsed="0.109785"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.855923" elapsed="0.111477"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.855279" elapsed="0.112290"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.968859" level="INFO">${next} = 18539</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.968016" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.970381" level="INFO">${current_port} = 18539</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:39.969292" elapsed="0.001186"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.850939" elapsed="0.119670"/>
</kw>
<msg time="2026-08-15T23:56:39.970696" level="INFO">Repeating keyword, round 710/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:39.973333" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:39.973086" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.973040" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.974388" level="INFO">${current_Date} = 2026-08-15 23:56:39.974</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:39.974016" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:39.974956" level="INFO">${ellapsed_seconds} = 2590.363</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:39.974609" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:39.975308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:39.975052" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:39.975034" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:39.972517" elapsed="0.002915"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.975960" level="INFO">${number} = 710</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.975577" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.977399" level="INFO">${number} = 710</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.977055" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:39.979457" level="INFO">${device-port} = 18539</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:39.978631" elapsed="0.000909"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:39.984828" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.016084" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.016305" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:39.984707" elapsed="0.031656"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.017286" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:40.017422" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.016530" elapsed="0.000999">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.016484" elapsed="0.001137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:39.984418" elapsed="0.033541">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:39.981245" elapsed="0.036925"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.019032" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18539 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.084190" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.084413" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.018518" elapsed="0.065949"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.084581" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:40.085051" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:39.980818" elapsed="0.104342"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.085764" elapsed="0.000948"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:39.980005" elapsed="0.106934"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:39.978175" elapsed="0.108958"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:39.977592" elapsed="0.109643"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.976595" elapsed="0.110764"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:39.976143" elapsed="0.111316"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.088610" level="INFO">${next} = 18540</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.087845" elapsed="0.000823"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.090039" level="INFO">${current_port} = 18540</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.089082" elapsed="0.001056"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:39.971202" elapsed="0.119064"/>
</kw>
<msg time="2026-08-15T23:56:40.090353" level="INFO">Repeating keyword, round 711/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.092916" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.092641" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.092599" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.093794" level="INFO">${current_Date} = 2026-08-15 23:56:40.094</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.093379" elapsed="0.000507"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.094664" level="INFO">${ellapsed_seconds} = 2590.243</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.094218" elapsed="0.000472"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.095025" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.094759" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.094741" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.092116" elapsed="0.003033"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.095654" level="INFO">${number} = 711</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.095292" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.097110" level="INFO">${number} = 711</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.096751" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.099241" level="INFO">${device-port} = 18540</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.098315" elapsed="0.001006"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.101980" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.135472" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.135694" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.101879" elapsed="0.033874"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.136664" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:40.137475" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.135958" elapsed="0.001792">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.135911" elapsed="0.001983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.101387" elapsed="0.036792">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.100999" elapsed="0.037323"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.138891" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18540 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.204169" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.204506" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.138567" elapsed="0.066000"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.204727" elapsed="0.000151"/>
</return>
<msg time="2026-08-15T23:56:40.205292" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.100568" elapsed="0.104923"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.206212" elapsed="0.001028"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.099765" elapsed="0.107682"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.097863" elapsed="0.109791"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.097296" elapsed="0.110470"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.096304" elapsed="0.111648"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.095857" elapsed="0.112201"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.209309" level="INFO">${next} = 18541</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.208433" elapsed="0.000990"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.210640" level="INFO">${current_port} = 18541</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.209861" elapsed="0.000839"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.090788" elapsed="0.120051"/>
</kw>
<msg time="2026-08-15T23:56:40.210899" level="INFO">Repeating keyword, round 712/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.212566" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.212404" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.212375" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.213198" level="INFO">${current_Date} = 2026-08-15 23:56:40.213</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.212962" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.213940" level="INFO">${ellapsed_seconds} = 2590.124</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.213466" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.214423" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.214075" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.214050" elapsed="0.000484"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.212064" elapsed="0.002535"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.215338" level="INFO">${number} = 712</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.214823" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.217372" level="INFO">${number} = 712</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.216880" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.220168" level="INFO">${device-port} = 18541</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.219062" elapsed="0.001216"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.223627" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.256080" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.256333" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.223348" elapsed="0.033045"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.257403" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:40.257544" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.256577" elapsed="0.001077">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.256524" elapsed="0.001223">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.223068" elapsed="0.035002">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.222658" elapsed="0.035635"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.259176" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18541 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.324010" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.324218" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.258651" elapsed="0.065622"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.324384" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:40.324840" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.222079" elapsed="0.102877"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.325570" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.220918" elapsed="0.105745"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.218410" elapsed="0.108497"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.217645" elapsed="0.109369"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.216236" elapsed="0.110903"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.215590" elapsed="0.111645"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.328417" level="INFO">${next} = 18542</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.327579" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.329980" level="INFO">${current_port} = 18542</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.328881" elapsed="0.001211"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.211215" elapsed="0.119009"/>
</kw>
<msg time="2026-08-15T23:56:40.330310" level="INFO">Repeating keyword, round 713/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.332842" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.332568" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.332526" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.333641" level="INFO">${current_Date} = 2026-08-15 23:56:40.334</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.333369" elapsed="0.000298"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.334160" level="INFO">${ellapsed_seconds} = 2590.003</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.333831" elapsed="0.000356"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.334513" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.334259" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.334238" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.332042" elapsed="0.002616"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.335191" level="INFO">${number} = 713</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.334822" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.336650" level="INFO">${number} = 713</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.336295" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.338696" level="INFO">${device-port} = 18542</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.337904" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.341296" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.375837" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.376064" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.341193" elapsed="0.034930"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.377029" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:40.377204" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.376290" elapsed="0.001113">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.376244" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.340890" elapsed="0.036884">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.340463" elapsed="0.037490"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.378786" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18542 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.444100" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.444395" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.378305" elapsed="0.066153"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.444602" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:56:40.445179" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.340043" elapsed="0.105258"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.446019" elapsed="0.001047"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.339234" elapsed="0.108043"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.337415" elapsed="0.110070"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.336862" elapsed="0.110736"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.335841" elapsed="0.111899"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.335375" elapsed="0.112528"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.449250" level="INFO">${next} = 18543</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.448303" elapsed="0.001016"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.450762" level="INFO">${current_port} = 18543</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.449724" elapsed="0.001206"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.330737" elapsed="0.120353"/>
</kw>
<msg time="2026-08-15T23:56:40.451189" level="INFO">Repeating keyword, round 714/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.453795" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.453677" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.453654" elapsed="0.000228"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.454274" level="INFO">${current_Date} = 2026-08-15 23:56:40.454</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.454091" elapsed="0.000212"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.454794" level="INFO">${ellapsed_seconds} = 2589.883</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.454457" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.455187" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.454919" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.454900" elapsed="0.000371"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.453237" elapsed="0.002081"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.455872" level="INFO">${number} = 714</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.455466" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.457561" level="INFO">${number} = 714</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.457203" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.459662" level="INFO">${device-port} = 18543</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.458843" elapsed="0.000904"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.462340" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.495635" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.495903" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.462230" elapsed="0.033744"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.496922" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:56:40.497071" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.496145" elapsed="0.001037">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.496095" elapsed="0.001180">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.461944" elapsed="0.035620">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.461501" elapsed="0.036325"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.498673" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18543 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.564012" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.564232" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.498186" elapsed="0.066103"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.564415" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:40.564915" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.461080" elapsed="0.103959"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.565607" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.460217" elapsed="0.106489"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.458337" elapsed="0.108608"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.457763" elapsed="0.109285"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.456694" elapsed="0.110479"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.456097" elapsed="0.111172"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.568428" level="INFO">${next} = 18544</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.567620" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.569705" level="INFO">${current_port} = 18544</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.568940" elapsed="0.000826"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.451689" elapsed="0.118201"/>
</kw>
<msg time="2026-08-15T23:56:40.569946" level="INFO">Repeating keyword, round 715/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.571512" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.571359" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.571331" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.572058" level="INFO">${current_Date} = 2026-08-15 23:56:40.572</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.571829" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.572751" level="INFO">${ellapsed_seconds} = 2589.765</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.572304" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.573276" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.572934" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.572906" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.571020" elapsed="0.002431"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.574190" level="INFO">${number} = 715</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.573656" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.576318" level="INFO">${number} = 715</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.575829" elapsed="0.000526"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.579157" level="INFO">${device-port} = 18544</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.578027" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.582479" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.625677" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.625974" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.582374" elapsed="0.043662"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.627027" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:40.627168" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.626226" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.626171" elapsed="0.001322">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.582100" elapsed="0.045686">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.581685" elapsed="0.046279"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.628931" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18544 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.692166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.692454" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.628329" elapsed="0.064184"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.692692" elapsed="0.000139"/>
</return>
<msg time="2026-08-15T23:56:40.693236" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.581109" elapsed="0.112240"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.694010" elapsed="0.000976"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.579926" elapsed="0.115261"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.577361" elapsed="0.118024"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.576589" elapsed="0.118901"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.575102" elapsed="0.120519"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.574445" elapsed="0.121273"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.696976" level="INFO">${next} = 18545</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.696114" elapsed="0.000924"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.698320" level="INFO">${current_port} = 18545</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.697403" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.570215" elapsed="0.128337"/>
</kw>
<msg time="2026-08-15T23:56:40.698639" level="INFO">Repeating keyword, round 716/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.701385" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.701132" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.701085" elapsed="0.000453"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.701956" level="INFO">${current_Date} = 2026-08-15 23:56:40.702</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.701762" elapsed="0.000222"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.702471" level="INFO">${ellapsed_seconds} = 2589.635</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.702137" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.702844" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.702570" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.702551" elapsed="0.000375"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.700506" elapsed="0.002466"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.703491" level="INFO">${number} = 716</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.703120" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.704971" level="INFO">${number} = 716</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.704607" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.707090" level="INFO">${device-port} = 18545</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.706157" elapsed="0.001017"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.709698" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.744041" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.744266" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.709590" elapsed="0.034735"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.745286" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:40.745424" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.744490" elapsed="0.001042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.744444" elapsed="0.001181">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.709313" elapsed="0.036632">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.708919" elapsed="0.037243"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.747046" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18545 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.811921" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.812152" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.746518" elapsed="0.065691"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.812329" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:40.812861" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.708442" elapsed="0.104537"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.813568" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.707621" elapsed="0.107063"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.705688" elapsed="0.109232"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.705159" elapsed="0.109866"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.704141" elapsed="0.111009"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.703673" elapsed="0.111573"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.816399" level="INFO">${next} = 18546</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.815595" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.817759" level="INFO">${current_port} = 18546</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.816888" elapsed="0.001033"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.699172" elapsed="0.118880"/>
</kw>
<msg time="2026-08-15T23:56:40.818139" level="INFO">Repeating keyword, round 717/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.820783" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.820524" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.820469" elapsed="0.000492"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.821607" level="INFO">${current_Date} = 2026-08-15 23:56:40.821</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.821293" elapsed="0.000345"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.822143" level="INFO">${ellapsed_seconds} = 2589.516</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.821790" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.822492" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.822240" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.822221" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.819918" elapsed="0.002698"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.823142" level="INFO">${number} = 717</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.822761" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.824594" level="INFO">${number} = 717</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.824239" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.826626" level="INFO">${device-port} = 18546</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.825830" elapsed="0.000877"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.829452" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.863896" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.864117" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.829186" elapsed="0.034991"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.865160" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:40.865297" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.864376" elapsed="0.001134">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.864300" elapsed="0.001313">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.828900" elapsed="0.037037">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.828478" elapsed="0.037608"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.866961" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18546 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:40.932025" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.932271" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.866439" elapsed="0.065892"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:40.932450" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:56:40.932934" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.827995" elapsed="0.105050"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:40.933599" elapsed="0.000904"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.827170" elapsed="0.107524"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.825357" elapsed="0.109576"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.824783" elapsed="0.110255"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.823771" elapsed="0.111394"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.823323" elapsed="0.111936"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.936429" level="INFO">${next} = 18547</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.935606" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.937759" level="INFO">${current_port} = 18547</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:40.936899" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.818581" elapsed="0.119473"/>
</kw>
<msg time="2026-08-15T23:56:40.938141" level="INFO">Repeating keyword, round 718/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:40.940726" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:40.940478" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.940434" elapsed="0.000477"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.941619" level="INFO">${current_Date} = 2026-08-15 23:56:40.942</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:40.941313" elapsed="0.000339"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:40.942158" level="INFO">${ellapsed_seconds} = 2589.395</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:40.941821" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.942504" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:40.942256" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:40.942237" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:40.939890" elapsed="0.002737"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.943152" level="INFO">${number} = 718</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.942773" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.944603" level="INFO">${number} = 718</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.944259" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:40.946602" level="INFO">${device-port} = 18547</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:40.945790" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.949424" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:40.983872" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:40.984097" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.949165" elapsed="0.035021"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:40.985119" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:40.985256" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:40.984359" elapsed="0.001005">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:40.984312" elapsed="0.001143">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:40.948890" elapsed="0.036839">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:40.948459" elapsed="0.037518"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:40.986851" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18547 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.052192" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.052424" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:40.986329" elapsed="0.066150"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.052602" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:41.053080" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:40.948004" elapsed="0.105188"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.053775" elapsed="0.000938"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:40.947139" elapsed="0.107802"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:40.945345" elapsed="0.109790"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:40.944794" elapsed="0.110443"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.943782" elapsed="0.111581"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:40.943334" elapsed="0.112130"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.056795" level="INFO">${next} = 18548</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.055851" elapsed="0.001070"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.058202" level="INFO">${current_port} = 18548</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.057292" elapsed="0.001007"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:40.938567" elapsed="0.119872"/>
</kw>
<msg time="2026-08-15T23:56:41.058565" level="INFO">Repeating keyword, round 719/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.061202" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.060952" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.060908" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.062060" level="INFO">${current_Date} = 2026-08-15 23:56:41.062</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.061670" elapsed="0.000449"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.063196" level="INFO">${ellapsed_seconds} = 2589.275</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.062447" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.063979" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.063413" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.063370" elapsed="0.000812"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.060377" elapsed="0.003906"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.065450" level="INFO">${number} = 719</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.064606" elapsed="0.000914"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.068671" level="INFO">${number} = 719</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.067960" elapsed="0.000738"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.070762" level="INFO">${device-port} = 18548</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.069982" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.073561" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.100050" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.100267" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.073457" elapsed="0.026868"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.101242" elapsed="0.000054"/>
</kw>
<msg time="2026-08-15T23:56:41.101374" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.100490" elapsed="0.001078">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.100445" elapsed="0.001221">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.073024" elapsed="0.028955">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.072608" elapsed="0.029517"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.102976" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18548 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.168266" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.168494" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.102470" elapsed="0.066081"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.168668" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:41.169121" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.072178" elapsed="0.097056"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.169878" elapsed="0.000863"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.071304" elapsed="0.099673"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.069502" elapsed="0.101667"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.068871" elapsed="0.102399"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.066934" elapsed="0.104467"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.065896" elapsed="0.105602"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.172696" level="INFO">${next} = 18549</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.171923" elapsed="0.000834"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.174098" level="INFO">${current_port} = 18549</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.173194" elapsed="0.001003"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.059061" elapsed="0.115266"/>
</kw>
<msg time="2026-08-15T23:56:41.174413" level="INFO">Repeating keyword, round 720/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.177055" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.176769" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.176727" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.178002" level="INFO">${current_Date} = 2026-08-15 23:56:41.178</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.177614" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.179119" level="INFO">${ellapsed_seconds} = 2589.159</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.178400" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.180011" elapsed="0.000104"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.179340" elapsed="0.000865"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.179298" elapsed="0.000965"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.176229" elapsed="0.004144"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.181054" level="INFO">${number} = 720</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.180656" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.182629" level="INFO">${number} = 720</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.182202" elapsed="0.000455"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.184661" level="INFO">${device-port} = 18549</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.183867" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.187391" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.219894" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.220146" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.187293" elapsed="0.032915"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.221178" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:41.221320" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.220401" elapsed="0.001027">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.220347" elapsed="0.001174">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.187017" elapsed="0.034811">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.186432" elapsed="0.035619"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.222939" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18549 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.292210" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.292431" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.222413" elapsed="0.070073"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.292603" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:41.293076" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.186020" elapsed="0.107167"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.293758" elapsed="0.000953"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.185209" elapsed="0.109732"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.183374" elapsed="0.111760"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.182839" elapsed="0.112399"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.181689" elapsed="0.113674"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.181241" elapsed="0.114220"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.296699" level="INFO">${next} = 18550</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.295917" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.298089" level="INFO">${current_port} = 18550</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.297180" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.174904" elapsed="0.123413"/>
</kw>
<msg time="2026-08-15T23:56:41.298404" level="INFO">Repeating keyword, round 721/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.300876" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.300695" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.300669" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.301396" level="INFO">${current_Date} = 2026-08-15 23:56:41.301</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.301170" elapsed="0.000262"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.302106" level="INFO">${ellapsed_seconds} = 2589.036</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.301645" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.302578" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.302239" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.302213" elapsed="0.000474"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.300254" elapsed="0.002495"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.303486" level="INFO">${number} = 721</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.302974" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.305543" level="INFO">${number} = 721</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.305061" elapsed="0.000520"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.308353" level="INFO">${device-port} = 18550</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.307213" elapsed="0.001256"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.312386" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.344007" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.344227" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.312249" elapsed="0.032036"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.345196" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:41.345329" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.344449" elapsed="0.001099">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.344404" elapsed="0.001243">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.311661" elapsed="0.034298">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.310868" elapsed="0.035237"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.346960" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18550 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.411754" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.411996" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.346452" elapsed="0.065599"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.412160" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:41.412555" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.310246" elapsed="0.102431"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.413443" elapsed="0.000940"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.309122" elapsed="0.105454"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.306559" elapsed="0.108204"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.305819" elapsed="0.109093"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.304403" elapsed="0.110634"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.303751" elapsed="0.111380"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.416310" level="INFO">${next} = 18551</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.415478" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.417659" level="INFO">${current_port} = 18551</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.416770" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.298904" elapsed="0.119143"/>
</kw>
<msg time="2026-08-15T23:56:41.418135" level="INFO">Repeating keyword, round 722/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.420759" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.420486" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.420436" elapsed="0.000501"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.421706" level="INFO">${current_Date} = 2026-08-15 23:56:41.422</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.421347" elapsed="0.000418"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.422843" level="INFO">${ellapsed_seconds} = 2588.915</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.422136" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.423692" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.423065" elapsed="0.000793"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.423023" elapsed="0.000893"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.419871" elapsed="0.004152"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.424890" level="INFO">${number} = 722</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.424358" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.426453" level="INFO">${number} = 722</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.426006" elapsed="0.000474"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.428499" level="INFO">${device-port} = 18551</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.427675" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.433697" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.460244" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.460515" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.433591" elapsed="0.026996"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.461639" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:41.461781" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.460763" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.460708" elapsed="0.001313">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.433302" elapsed="0.028997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.430305" elapsed="0.032211"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.463374" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18551 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.527607" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.527873" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.462891" elapsed="0.065045"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.528057" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:41.528497" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.429878" elapsed="0.098735"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.529255" elapsed="0.000987"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.429045" elapsed="0.101425"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.427195" elapsed="0.103488"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.426646" elapsed="0.104149"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.425529" elapsed="0.105459"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.425073" elapsed="0.106022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.532361" level="INFO">${next} = 18552</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.531499" elapsed="0.000926"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.533778" level="INFO">${current_port} = 18552</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.532852" elapsed="0.001092"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.418552" elapsed="0.115527"/>
</kw>
<msg time="2026-08-15T23:56:41.534172" level="INFO">Repeating keyword, round 723/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.536713" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.536562" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.536535" elapsed="0.000284"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.537251" level="INFO">${current_Date} = 2026-08-15 23:56:41.537</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.537024" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.537956" level="INFO">${ellapsed_seconds} = 2588.8</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.537494" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.538421" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.538091" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.538065" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.536071" elapsed="0.002520"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.539321" level="INFO">${number} = 723</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.538791" elapsed="0.000587"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.541496" level="INFO">${number} = 723</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.541020" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.544430" level="INFO">${device-port} = 18552</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.543292" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.548350" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.579859" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.580102" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.548211" elapsed="0.031955"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.581267" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:41.581418" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.580350" elapsed="0.001267">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.580300" elapsed="0.001425">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.547479" elapsed="0.034579">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.546896" elapsed="0.035317"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.583219" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18552 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.652125" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.652373" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.582636" elapsed="0.069793"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.652553" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:41.653034" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.546292" elapsed="0.106852"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.653725" elapsed="0.000949"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.545182" elapsed="0.109720"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.542544" elapsed="0.112553"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.541755" elapsed="0.113476"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.540297" elapsed="0.115065"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.539598" elapsed="0.115860"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.656607" level="INFO">${next} = 18553</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.655841" elapsed="0.000827"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.657986" level="INFO">${current_port} = 18553</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.657085" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.534624" elapsed="0.123588"/>
</kw>
<msg time="2026-08-15T23:56:41.658299" level="INFO">Repeating keyword, round 724/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.660411" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.660255" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.660228" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.661007" level="INFO">${current_Date} = 2026-08-15 23:56:41.661</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.660758" elapsed="0.000286"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.661688" level="INFO">${ellapsed_seconds} = 2588.676</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.661252" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.662181" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.661844" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.661797" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.659920" elapsed="0.002433"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.663091" level="INFO">${number} = 724</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.662555" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.665150" level="INFO">${number} = 724</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.664653" elapsed="0.000535"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.667952" level="INFO">${device-port} = 18553</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.666796" elapsed="0.001271"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.671746" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.695694" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.695954" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.671390" elapsed="0.024625"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.696919" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:41.697056" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.696181" elapsed="0.000982">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.696136" elapsed="0.001118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.670967" elapsed="0.026561">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.670388" elapsed="0.027347"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.698599" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18553 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.764038" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.764255" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.698119" elapsed="0.066192"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.764436" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:41.764887" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.669792" elapsed="0.095210"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.765563" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.668677" elapsed="0.097971"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.666175" elapsed="0.100704"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.665411" elapsed="0.101576"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.664035" elapsed="0.103119"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.663379" elapsed="0.103874"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.768386" level="INFO">${next} = 18554</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.767597" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.769708" level="INFO">${current_port} = 18554</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.768854" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.658740" elapsed="0.111259"/>
</kw>
<msg time="2026-08-15T23:56:41.770086" level="INFO">Repeating keyword, round 725/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.772236" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.772081" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.772054" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.772747" level="INFO">${current_Date} = 2026-08-15 23:56:41.773</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.772531" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.773449" level="INFO">${ellapsed_seconds} = 2588.564</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.773016" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.773938" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.773582" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.773557" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.771728" elapsed="0.002385"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.774852" level="INFO">${number} = 725</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.774317" elapsed="0.000573"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.777009" level="INFO">${number} = 725</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.776497" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.779865" level="INFO">${device-port} = 18554</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.778703" elapsed="0.001291"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.783563" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.811868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.812094" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.783450" elapsed="0.028703"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.813063" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:41.813200" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.812319" elapsed="0.001090">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.812273" elapsed="0.001235">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.783049" elapsed="0.030734">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.782420" elapsed="0.031543"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.814793" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18554 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.879840" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.880072" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.814312" elapsed="0.065815"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.880247" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:56:41.880677" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.781831" elapsed="0.098956"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.881411" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.780676" elapsed="0.101942"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.778043" elapsed="0.104850"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.777275" elapsed="0.105732"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.775827" elapsed="0.107312"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.775129" elapsed="0.108107"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.884397" level="INFO">${next} = 18555</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.883585" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.885738" level="INFO">${current_port} = 18555</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:41.884870" elapsed="0.001025"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.770534" elapsed="0.115493"/>
</kw>
<msg time="2026-08-15T23:56:41.886115" level="INFO">Repeating keyword, round 726/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:41.888683" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:41.888436" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.888392" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.889651" level="INFO">${current_Date} = 2026-08-15 23:56:41.889</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:41.889288" elapsed="0.000425"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:41.890784" level="INFO">${ellapsed_seconds} = 2588.448</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:41.890083" elapsed="0.000840"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.891619" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:41.891088" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:41.891046" elapsed="0.000653"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:41.887900" elapsed="0.003844"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.892271" level="INFO">${number} = 726</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.891906" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.893717" level="INFO">${number} = 726</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.893368" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:41.895879" level="INFO">${device-port} = 18555</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.895067" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.898461" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:41.927890" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.928114" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.898359" elapsed="0.029815"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:41.929091" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:41.929229" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:41.928341" elapsed="0.000994">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:41.928293" elapsed="0.001133">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:41.898083" elapsed="0.031619">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:41.897658" elapsed="0.032286"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:41.930784" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18555 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:41.995878" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:41.996093" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:41.930301" elapsed="0.065847"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:41.996260" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:41.996665" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:41.897235" elapsed="0.099539"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:41.997391" elapsed="0.000885"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:41.896410" elapsed="0.102054"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:41.894572" elapsed="0.104083"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:41.893920" elapsed="0.104866"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.892921" elapsed="0.106038"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:41.892455" elapsed="0.106601"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.000192" level="INFO">${next} = 18556</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:41.999403" elapsed="0.000848"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.001515" level="INFO">${current_port} = 18556</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.000612" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:41.886554" elapsed="0.115184"/>
</kw>
<msg time="2026-08-15T23:56:42.001890" level="INFO">Repeating keyword, round 727/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.004416" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.004169" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.004122" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.005280" level="INFO">${current_Date} = 2026-08-15 23:56:42.005</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.004931" elapsed="0.000411"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.006389" level="INFO">${ellapsed_seconds} = 2588.332</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.005673" elapsed="0.000774"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.007248" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.006605" elapsed="0.000767"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.006563" elapsed="0.000862"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.003604" elapsed="0.003938"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.008127" level="INFO">${number} = 727</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.007740" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.009553" level="INFO">${number} = 727</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.009217" elapsed="0.000363"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.011563" level="INFO">${device-port} = 18556</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.010753" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.014134" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.043839" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.044063" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.014031" elapsed="0.030092"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.045030" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:42.045167" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.044287" elapsed="0.001072">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.044242" elapsed="0.001217">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.013721" elapsed="0.032015">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.013328" elapsed="0.032585"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.046833" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18556 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.111861" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.112092" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.046264" elapsed="0.065884"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.112270" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:42.112698" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.012907" elapsed="0.099942"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.113429" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.012104" elapsed="0.102423"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.010278" elapsed="0.104474"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.009737" elapsed="0.105163"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.008752" elapsed="0.106279"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.008309" elapsed="0.106818"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.116269" level="INFO">${next} = 18557</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.115473" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.117592" level="INFO">${current_port} = 18557</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.116689" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.002320" elapsed="0.115562"/>
</kw>
<msg time="2026-08-15T23:56:42.117975" level="INFO">Repeating keyword, round 728/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.120533" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.120288" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.120244" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.121549" level="INFO">${current_Date} = 2026-08-15 23:56:42.121</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.121194" elapsed="0.000416"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.122726" level="INFO">${ellapsed_seconds} = 2588.216</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.121980" elapsed="0.000806"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.123530" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.122982" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.122939" elapsed="0.000724"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.119720" elapsed="0.003996"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.124249" level="INFO">${number} = 728</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.123878" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.125696" level="INFO">${number} = 728</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.125350" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.127700" level="INFO">${device-port} = 18557</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.126905" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.130273" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.164243" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.164465" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.130170" elapsed="0.034354"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.165437" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:42.165572" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.164690" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.164644" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.129883" elapsed="0.036199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.129469" elapsed="0.036831"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.167193" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18557 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.235979" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.236197" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.166677" elapsed="0.069575"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.236363" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:42.236767" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.129056" elapsed="0.107871"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.237489" elapsed="0.000888"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.128247" elapsed="0.110347"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.126419" elapsed="0.112367"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.125897" elapsed="0.113035"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.124899" elapsed="0.114158"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.124434" elapsed="0.114720"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.240283" level="INFO">${next} = 18558</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.239496" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.241614" level="INFO">${current_port} = 18558</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.240713" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.118414" elapsed="0.123491"/>
</kw>
<msg time="2026-08-15T23:56:42.241998" level="INFO">Repeating keyword, round 729/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.244520" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.244278" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.244235" elapsed="0.000426"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.245356" level="INFO">${current_Date} = 2026-08-15 23:56:42.245</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.245015" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.246505" level="INFO">${ellapsed_seconds} = 2588.092</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.245747" elapsed="0.000820"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.247285" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.246727" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.246684" elapsed="0.000781"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.243712" elapsed="0.003869"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.248125" level="INFO">${number} = 729</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.247739" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.249560" level="INFO">${number} = 729</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.249213" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.251549" level="INFO">${device-port} = 18558</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.250746" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.254275" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.284003" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.284239" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.254025" elapsed="0.030272"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.285263" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:42.285398" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.284478" elapsed="0.001127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.284426" elapsed="0.001279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.253722" elapsed="0.032309">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.253334" elapsed="0.032844"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.287134" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18558 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.352021" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.352237" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.286587" elapsed="0.065706"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.352418" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:56:42.352902" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.252915" elapsed="0.100104"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.353578" elapsed="0.000978"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.252101" elapsed="0.102646"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.250284" elapsed="0.104703"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.249748" elapsed="0.105340"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.248751" elapsed="0.106460"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.248306" elapsed="0.107000"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.356468" level="INFO">${next} = 18559</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.355680" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.357788" level="INFO">${current_port} = 18559</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.356933" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.242449" elapsed="0.115630"/>
</kw>
<msg time="2026-08-15T23:56:42.358164" level="INFO">Repeating keyword, round 730/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.359918" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.359735" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.359708" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.360482" level="INFO">${current_Date} = 2026-08-15 23:56:42.360</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.360258" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.361192" level="INFO">${ellapsed_seconds} = 2587.977</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.360727" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.361671" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.361328" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.361303" elapsed="0.000479"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.359399" elapsed="0.002469"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.362609" level="INFO">${number} = 730</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.362081" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.364627" level="INFO">${number} = 730</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.364159" elapsed="0.000505"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.367407" level="INFO">${device-port} = 18559</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.366301" elapsed="0.001216"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.371126" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.407881" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.408102" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.370878" elapsed="0.037283"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.409061" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:42.409196" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.408326" elapsed="0.000975">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.408280" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.370447" elapsed="0.039211">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.369872" elapsed="0.040021"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.410759" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18559 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.476016" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.476268" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.410266" elapsed="0.066062"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.476457" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:56:42.476955" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.369264" elapsed="0.107810"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.477688" elapsed="0.001004"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.368155" elapsed="0.110785"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.365627" elapsed="0.113522"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.364905" elapsed="0.114354"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.363519" elapsed="0.115872"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.362887" elapsed="0.116611"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.480710" level="INFO">${next} = 18560</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.479906" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.482220" level="INFO">${current_port} = 18560</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.481208" elapsed="0.001118"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.358583" elapsed="0.123881"/>
</kw>
<msg time="2026-08-15T23:56:42.482560" level="INFO">Repeating keyword, round 731/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.485336" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.485072" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.485014" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.486324" level="INFO">${current_Date} = 2026-08-15 23:56:42.486</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.485879" elapsed="0.000512"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.487011" level="INFO">${ellapsed_seconds} = 2587.851</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.486668" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.487362" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.487108" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.487090" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.484461" elapsed="0.003028"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.488017" level="INFO">${number} = 731</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.487634" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.489518" level="INFO">${number} = 731</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.489175" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.491509" level="INFO">${device-port} = 18560</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.490710" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.494243" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.528295" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.528515" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.494134" elapsed="0.034439"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.529488" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:42.529623" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.528736" elapsed="0.001111">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.528690" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.493659" elapsed="0.036593">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.493269" elapsed="0.037125"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.531243" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18560 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.600055" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.600265" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.530735" elapsed="0.069584"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.600427" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:42.600867" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.492856" elapsed="0.108128"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.601537" elapsed="0.000932"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.492048" elapsed="0.110609"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.490267" elapsed="0.112620"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.489702" elapsed="0.113292"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.488704" elapsed="0.114412"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.488215" elapsed="0.114994"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.604324" level="INFO">${next} = 18561</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.603548" elapsed="0.000835"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.605635" level="INFO">${current_port} = 18561</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.604752" elapsed="0.000976"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.483068" elapsed="0.122875"/>
</kw>
<msg time="2026-08-15T23:56:42.606039" level="INFO">Repeating keyword, round 732/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.608547" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.608300" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.608257" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.609472" level="INFO">${current_Date} = 2026-08-15 23:56:42.609</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.609124" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.610620" level="INFO">${ellapsed_seconds} = 2587.728</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.609892" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.611105" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.610758" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.610733" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.607728" elapsed="0.003551"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.612007" level="INFO">${number} = 732</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.611480" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.614052" level="INFO">${number} = 732</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.613536" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.616796" level="INFO">${device-port} = 18561</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.615697" elapsed="0.001242"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.620648" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.652022" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.652237" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.620513" elapsed="0.031781"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.653195" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:42.653328" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.652457" elapsed="0.000975">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.652412" elapsed="0.001110">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.620128" elapsed="0.033659">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.619275" elapsed="0.034782"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.654910" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18561 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.720107" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.720327" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.654405" elapsed="0.065976"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.720498" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:42.720953" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.618669" elapsed="0.102393"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.721627" elapsed="0.000952"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.617551" elapsed="0.105217"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.615077" elapsed="0.107935"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.614318" elapsed="0.108796"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.612908" elapsed="0.110329"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.612260" elapsed="0.111074"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.724476" level="INFO">${next} = 18562</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.723678" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.725874" level="INFO">${current_port} = 18562</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.724936" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.606478" elapsed="0.119644"/>
</kw>
<msg time="2026-08-15T23:56:42.726211" level="INFO">Repeating keyword, round 733/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.728878" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.728603" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.728560" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.729688" level="INFO">${current_Date} = 2026-08-15 23:56:42.730</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.729346" elapsed="0.000401"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.730766" level="INFO">${ellapsed_seconds} = 2587.607</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.730167" elapsed="0.000625"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.731130" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.730888" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.730868" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.728060" elapsed="0.003193"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.731756" level="INFO">${number} = 733</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.731396" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.733211" level="INFO">${number} = 733</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.732869" elapsed="0.000368"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.735209" level="INFO">${device-port} = 18562</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.734406" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.738115" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.771609" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.771863" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.738018" elapsed="0.033907"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.772790" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:56:42.772954" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.772088" elapsed="0.001069">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.772043" elapsed="0.001211">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.737698" elapsed="0.035831">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.737128" elapsed="0.036541"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.774548" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18562 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.840006" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.840212" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.774071" elapsed="0.066195"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.840375" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:42.840767" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.736588" elapsed="0.104338"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.841482" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.735769" elapsed="0.106810"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.733954" elapsed="0.108813"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.733395" elapsed="0.109518"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.732402" elapsed="0.110635"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.731953" elapsed="0.111179"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.844244" level="INFO">${next} = 18563</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.843472" elapsed="0.000832"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.845544" level="INFO">${current_port} = 18563</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.844658" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.726647" elapsed="0.119144"/>
</kw>
<msg time="2026-08-15T23:56:42.845942" level="INFO">Repeating keyword, round 734/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.848418" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.848163" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.848120" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.849336" level="INFO">${current_Date} = 2026-08-15 23:56:42.849</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.848990" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.850496" level="INFO">${ellapsed_seconds} = 2587.488</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.849785" elapsed="0.000779"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.850932" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.850682" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.850664" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.847595" elapsed="0.003463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.851577" level="INFO">${number} = 734</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.851208" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.853027" level="INFO">${number} = 734</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.852666" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.855054" level="INFO">${device-port} = 18563</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.854248" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.860220" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:42.888040" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.888282" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.860121" elapsed="0.028220"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.889334" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:42.889471" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:42.888527" elapsed="0.001076">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:42.888475" elapsed="0.001224">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.859829" elapsed="0.030187">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.856832" elapsed="0.033418"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.891134" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18563 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:42.964381" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:42.964584" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.890605" elapsed="0.074033"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:42.964748" elapsed="0.000191"/>
</return>
<msg time="2026-08-15T23:56:42.965297" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.856391" elapsed="0.109012"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:42.966026" elapsed="0.000991"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.855582" elapsed="0.111622"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.853760" elapsed="0.113630"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.853212" elapsed="0.114279"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.852216" elapsed="0.115402"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.851758" elapsed="0.115956"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.968902" level="INFO">${next} = 18564</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.968100" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.970279" level="INFO">${current_port} = 18564</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:42.969326" elapsed="0.001049"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.846354" elapsed="0.124148"/>
</kw>
<msg time="2026-08-15T23:56:42.970589" level="INFO">Repeating keyword, round 735/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:42.973170" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:42.972921" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.972877" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.974087" level="INFO">${current_Date} = 2026-08-15 23:56:42.974</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:42.973694" elapsed="0.000452"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:42.974961" level="INFO">${ellapsed_seconds} = 2587.363</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:42.974474" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:42.975435" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:42.975095" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:42.975069" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:42.972359" elapsed="0.003252"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.976338" level="INFO">${number} = 735</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.975832" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.978394" level="INFO">${number} = 735</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.977919" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:42.981172" level="INFO">${device-port} = 18564</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:42.980079" elapsed="0.001206"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:42.985056" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.016203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.016416" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:42.984916" elapsed="0.031558"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.017370" elapsed="0.000081"/>
</kw>
<msg time="2026-08-15T23:56:43.017532" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.016636" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.016591" elapsed="0.001255">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:42.984201" elapsed="0.033916">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:42.983634" elapsed="0.034622"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.019108" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18564 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.083919" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.084123" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.018600" elapsed="0.065577"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.084285" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:43.084680" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:42.983061" elapsed="0.101726"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.085411" elapsed="0.000873"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:42.981950" elapsed="0.104518"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:42.979430" elapsed="0.107223"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:42.978672" elapsed="0.108080"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.977231" elapsed="0.109689"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:42.976588" elapsed="0.110428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.088157" level="INFO">${next} = 18565</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.087360" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.089525" level="INFO">${current_port} = 18565</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.088578" elapsed="0.001049"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:42.971075" elapsed="0.118678"/>
</kw>
<msg time="2026-08-15T23:56:43.089904" level="INFO">Repeating keyword, round 736/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.092382" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.092139" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.092096" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.093298" level="INFO">${current_Date} = 2026-08-15 23:56:43.093</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.092952" elapsed="0.000455"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.093997" level="INFO">${ellapsed_seconds} = 2587.244</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.093669" elapsed="0.000354"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.094331" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.094093" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.094075" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.091583" elapsed="0.002872"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.094981" level="INFO">${number} = 736</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.094601" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.096405" level="INFO">${number} = 736</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.096069" elapsed="0.000363"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.098410" level="INFO">${device-port} = 18565</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.097606" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.101139" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.165887" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.166107" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.100870" elapsed="0.065296"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.167058" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:43.167194" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.166329" elapsed="0.000971">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.166284" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.100572" elapsed="0.067089">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.100185" elapsed="0.067711"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.168730" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18565 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.235998" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.236204" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.168250" elapsed="0.068009"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.236367" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:43.236760" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.099748" elapsed="0.137166"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.237496" elapsed="0.000891"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.098959" elapsed="0.139618"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.097140" elapsed="0.141625"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.096591" elapsed="0.142321"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.095611" elapsed="0.143427"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.095163" elapsed="0.143971"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.240262" level="INFO">${next} = 18566</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.239480" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.241616" level="INFO">${current_port} = 18566</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.240684" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.090332" elapsed="0.151573"/>
</kw>
<msg time="2026-08-15T23:56:43.241996" level="INFO">Repeating keyword, round 737/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.244870" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.244564" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.244516" elapsed="0.000515"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.245786" level="INFO">${current_Date} = 2026-08-15 23:56:43.246</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.245411" elapsed="0.000473"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.247015" level="INFO">${ellapsed_seconds} = 2587.091</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.246243" elapsed="0.000835"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.247846" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.247249" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.247204" elapsed="0.000834"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.243974" elapsed="0.004173"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.249482" level="INFO">${number} = 737</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.248501" elapsed="0.001033"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.251529" level="INFO">${number} = 737</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.251057" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.254330" level="INFO">${device-port} = 18566</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.253208" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.258000" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.288161" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.288384" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.257757" elapsed="0.030688"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.289386" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:43.289523" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.288608" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.288563" elapsed="0.001306">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.257374" elapsed="0.032773">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.256789" elapsed="0.033501"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.291155" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18566 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.356311" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.356537" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.290638" elapsed="0.065954"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.356710" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:43.357199" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.256219" elapsed="0.101093"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.357942" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.255098" elapsed="0.103954"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.252528" elapsed="0.106718"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.251787" elapsed="0.107561"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.250406" elapsed="0.109067"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.249753" elapsed="0.109816"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.360734" level="INFO">${next} = 18567</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.359962" elapsed="0.000832"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.361940" level="INFO">${current_port} = 18567</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.361263" elapsed="0.000738"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.242423" elapsed="0.119660"/>
</kw>
<msg time="2026-08-15T23:56:43.362137" level="INFO">Repeating keyword, round 738/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.363732" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.363579" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.363551" elapsed="0.000295"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.364330" level="INFO">${current_Date} = 2026-08-15 23:56:43.364</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.364107" elapsed="0.000261"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.365046" level="INFO">${ellapsed_seconds} = 2586.973</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.364576" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.365518" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.365186" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.365160" elapsed="0.000469"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.363242" elapsed="0.002451"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.366433" level="INFO">${number} = 738</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.365920" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.368460" level="INFO">${number} = 738</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.367984" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.371256" level="INFO">${device-port} = 18567</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.370148" elapsed="0.001218"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.374531" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.408145" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.408366" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.374426" elapsed="0.034000"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.409375" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:43.409511" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.408594" elapsed="0.001024">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.408547" elapsed="0.001162">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.374143" elapsed="0.035872">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.373723" elapsed="0.036506"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.411110" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18567 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.476283" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.476510" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.410585" elapsed="0.065982"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.476682" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:43.477154" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.373159" elapsed="0.104104"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.477871" elapsed="0.000859"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.372007" elapsed="0.106950"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.369487" elapsed="0.109660"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.368720" elapsed="0.110528"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.367338" elapsed="0.112033"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.366689" elapsed="0.112776"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.480620" level="INFO">${next} = 18568</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.479855" elapsed="0.000824"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.482019" level="INFO">${current_port} = 18568</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.481120" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.362418" elapsed="0.119830"/>
</kw>
<msg time="2026-08-15T23:56:43.482335" level="INFO">Repeating keyword, round 739/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.484926" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.484602" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.484558" elapsed="0.000515"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.485722" level="INFO">${current_Date} = 2026-08-15 23:56:43.486</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.485399" elapsed="0.000356"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.486236" level="INFO">${ellapsed_seconds} = 2586.851</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.485927" elapsed="0.000335"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.486569" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.486333" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.486314" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.484067" elapsed="0.002627"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.487231" level="INFO">${number} = 739</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.486856" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.488680" level="INFO">${number} = 739</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.488329" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.490900" level="INFO">${device-port} = 18568</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.490084" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.493442" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.528069" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.528300" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.493339" elapsed="0.035020"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.529339" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:43.529477" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.528536" elapsed="0.001237">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.528487" elapsed="0.001425">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.493063" elapsed="0.037136">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.492645" elapsed="0.037698"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.531225" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18568 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.595953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.596183" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.530697" elapsed="0.065543"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.596356" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:43.596853" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.492225" elapsed="0.104750"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.597541" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.491419" elapsed="0.107252"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.489596" elapsed="0.109305"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.488890" elapsed="0.110117"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.487881" elapsed="0.111250"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.487413" elapsed="0.111815"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.600403" level="INFO">${next} = 18569</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.599580" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.601754" level="INFO">${current_port} = 18569</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.600921" elapsed="0.000921"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.482757" elapsed="0.119171"/>
</kw>
<msg time="2026-08-15T23:56:43.601982" level="INFO">Repeating keyword, round 740/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.603613" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.603455" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.603395" elapsed="0.000308"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.604211" level="INFO">${current_Date} = 2026-08-15 23:56:43.604</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.603985" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.604951" level="INFO">${ellapsed_seconds} = 2586.733</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.604458" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.605424" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.605088" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.605062" elapsed="0.000508"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.603088" elapsed="0.002563"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.606432" level="INFO">${number} = 740</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.605891" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.608583" level="INFO">${number} = 740</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.608027" elapsed="0.000615"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.611073" level="INFO">${device-port} = 18569</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.610274" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.613650" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.644194" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.644422" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.613542" elapsed="0.030939"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.645423" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:43.645558" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.644667" elapsed="0.000998">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.644602" elapsed="0.001154">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.613259" elapsed="0.032809">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.612865" elapsed="0.033431"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.647174" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18569 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.712179" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.712405" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.646653" elapsed="0.065809"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.712606" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:43.713077" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.612402" elapsed="0.100787"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.713761" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.611594" elapsed="0.103320"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.609819" elapsed="0.105291"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.609011" elapsed="0.106201"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.607360" elapsed="0.107981"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.606694" elapsed="0.108750"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.716615" level="INFO">${next} = 18570</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.715792" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.717997" level="INFO">${current_port} = 18570</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.717097" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.602252" elapsed="0.115975"/>
</kw>
<msg time="2026-08-15T23:56:43.718316" level="INFO">Repeating keyword, round 741/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.720946" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.720665" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.720617" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.721752" level="INFO">${current_Date} = 2026-08-15 23:56:43.722</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.721427" elapsed="0.000358"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.722271" level="INFO">${ellapsed_seconds} = 2586.615</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.721953" elapsed="0.000344"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.722611" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.722368" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.722349" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.720077" elapsed="0.002658"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.723259" level="INFO">${number} = 741</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.722895" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.724716" level="INFO">${number} = 741</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.724342" elapsed="0.000401"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.726687" level="INFO">${device-port} = 18570</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.725910" elapsed="0.000859"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.729429" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.764141" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.764359" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.729165" elapsed="0.035253"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.765441" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:43.765576" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.764662" elapsed="0.001105">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.764599" elapsed="0.001301">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.728883" elapsed="0.037295">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.728443" elapsed="0.037878"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.767194" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18570 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.836244" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.836487" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.766669" elapsed="0.069879"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.836660" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:43.837109" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.728028" elapsed="0.109191"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.837778" elapsed="0.000891"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.727222" elapsed="0.111676"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.725443" elapsed="0.113649"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.724922" elapsed="0.114269"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.723900" elapsed="0.115413"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.723439" elapsed="0.115967"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.840583" level="INFO">${next} = 18571</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.839751" elapsed="0.000893"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.841947" level="INFO">${current_port} = 18571</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.841058" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.718751" elapsed="0.123422"/>
</kw>
<msg time="2026-08-15T23:56:43.842259" level="INFO">Repeating keyword, round 742/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.844896" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.844616" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.844573" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.845832" level="INFO">${current_Date} = 2026-08-15 23:56:43.846</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.845529" elapsed="0.000331"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.846316" level="INFO">${ellapsed_seconds} = 2586.491</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.846011" elapsed="0.000331"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.846647" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.846412" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.846394" elapsed="0.000332"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.844030" elapsed="0.002742"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.847311" level="INFO">${number} = 742</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.846938" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.848777" level="INFO">${number} = 742</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.848430" elapsed="0.000390"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.850772" level="INFO">${device-port} = 18571</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.849976" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.853500" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:43.888161" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.888419" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.853254" elapsed="0.035231"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.889400" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:43.889535" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:43.888650" elapsed="0.000992">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:43.888604" elapsed="0.001144">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.852974" elapsed="0.037077">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.852557" elapsed="0.037709"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.891133" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18571 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:43.959974" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:43.960193" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.890618" elapsed="0.069631"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:43.960460" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:43.960932" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.852123" elapsed="0.108920"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:43.961609" elapsed="0.000895"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.851315" elapsed="0.111376"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.849505" elapsed="0.113425"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.848979" elapsed="0.114056"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.847960" elapsed="0.115201"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.847491" elapsed="0.115767"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.964449" level="INFO">${next} = 18572</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.963605" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.965930" level="INFO">${current_port} = 18572</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:43.964999" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.842680" elapsed="0.123480"/>
</kw>
<msg time="2026-08-15T23:56:43.966247" level="INFO">Repeating keyword, round 743/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:43.968812" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:43.968630" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.968581" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.969198" level="INFO">${current_Date} = 2026-08-15 23:56:43.969</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:43.969037" elapsed="0.000188"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:43.969688" level="INFO">${ellapsed_seconds} = 2586.368</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:43.969378" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:43.970040" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:43.969783" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:43.969764" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:43.968010" elapsed="0.002153"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.970672" level="INFO">${number} = 743</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.970307" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.972127" level="INFO">${number} = 743</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.971765" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:43.974134" level="INFO">${device-port} = 18572</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:43.973340" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:43.976942" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.007556" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.007771" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:43.976840" elapsed="0.031025"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.008792" elapsed="0.000088"/>
</kw>
<msg time="2026-08-15T23:56:44.008960" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.008032" elapsed="0.001154">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.007987" elapsed="0.001299">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:43.976284" elapsed="0.033277">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:43.975882" elapsed="0.033820"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.010575" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18572 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.076391" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.076620" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.010081" elapsed="0.066597"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.076794" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:56:44.077248" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:43.975450" elapsed="0.101910"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.077966" elapsed="0.000892"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:43.974649" elapsed="0.104406"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:43.972893" elapsed="0.106353"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:43.972341" elapsed="0.107005"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.971319" elapsed="0.108152"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:43.970867" elapsed="0.108701"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.080796" level="INFO">${next} = 18573</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.079984" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.081634" level="INFO">${current_port} = 18573</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.081100" elapsed="0.000594"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:43.966690" elapsed="0.115087"/>
</kw>
<msg time="2026-08-15T23:56:44.081863" level="INFO">Repeating keyword, round 744/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.083450" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.083295" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.083262" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.084036" level="INFO">${current_Date} = 2026-08-15 23:56:44.084</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.083792" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.084774" level="INFO">${ellapsed_seconds} = 2586.253</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.084338" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.085264" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.084933" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.084908" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.082955" elapsed="0.002483"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.086183" level="INFO">${number} = 744</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.085649" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.088234" level="INFO">${number} = 744</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.087709" elapsed="0.000566"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.091013" level="INFO">${device-port} = 18573</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.089906" elapsed="0.001223"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.094289" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.127949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.128221" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.094191" elapsed="0.034093"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.129231" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:44.129368" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.128459" elapsed="0.001016">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.128411" elapsed="0.001156">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.093914" elapsed="0.035963">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.093323" elapsed="0.036775"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.130975" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18573 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.196198" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.196419" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.130456" elapsed="0.066018"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.196587" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:44.197055" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.092905" elapsed="0.104259"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.197725" elapsed="0.000935"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.091732" elapsed="0.107152"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.089250" elapsed="0.109829"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.088499" elapsed="0.110682"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.087088" elapsed="0.112217"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.086444" elapsed="0.112958"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.200628" level="INFO">${next} = 18574</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.199751" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.201502" level="INFO">${current_port} = 18574</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.200956" elapsed="0.000605"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.082139" elapsed="0.119502"/>
</kw>
<msg time="2026-08-15T23:56:44.201696" level="INFO">Repeating keyword, round 745/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.203329" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.203178" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.203144" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.203866" level="INFO">${current_Date} = 2026-08-15 23:56:44.204</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.203620" elapsed="0.000285"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.204569" level="INFO">${ellapsed_seconds} = 2586.133</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.204125" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.205067" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.204706" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.204680" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.202835" elapsed="0.002423"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.205987" level="INFO">${number} = 745</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.205463" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.208022" level="INFO">${number} = 745</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.207512" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.210776" level="INFO">${device-port} = 18574</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.209669" elapsed="0.001249"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.214191" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.252032" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.252250" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.214093" elapsed="0.038216"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.253222" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:44.253358" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.252474" elapsed="0.001088">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.252428" elapsed="0.001233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.213767" elapsed="0.040201">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.213198" elapsed="0.040914"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.254964" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18574 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.320080" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.320432" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.254457" elapsed="0.066037"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.320665" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:56:44.321200" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.212738" elapsed="0.108582"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.321970" elapsed="0.000929"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.211544" elapsed="0.111560"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.209052" elapsed="0.114252"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.208287" elapsed="0.115122"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.206886" elapsed="0.116656"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.206246" elapsed="0.117395"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.324914" level="INFO">${next} = 18575</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.324130" elapsed="0.000835"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.325936" level="INFO">${current_port} = 18575</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.325257" elapsed="0.000746"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.202005" elapsed="0.124083"/>
</kw>
<msg time="2026-08-15T23:56:44.326143" level="INFO">Repeating keyword, round 746/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.327746" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.327580" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.327553" elapsed="0.000331"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.328404" level="INFO">${current_Date} = 2026-08-15 23:56:44.328</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.328175" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.329125" level="INFO">${ellapsed_seconds} = 2586.009</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.328663" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.329601" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.329264" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.329237" elapsed="0.000478"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.327236" elapsed="0.002561"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.330593" level="INFO">${number} = 746</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.330039" elapsed="0.000593"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.332880" level="INFO">${number} = 746</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.332335" elapsed="0.000586"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.336141" level="INFO">${device-port} = 18575</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.334670" elapsed="0.001591"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.341743" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.372318" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.372556" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.341632" elapsed="0.030995"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.373589" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:44.373729" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.372856" elapsed="0.001014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.372768" elapsed="0.001198">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.341326" elapsed="0.032923">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.338268" elapsed="0.036207"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.375353" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18575 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.440373" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.440597" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.374857" elapsed="0.065797"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.440767" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:56:44.441226" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.337834" elapsed="0.103505"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.441953" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.336986" elapsed="0.106072"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.333957" elapsed="0.109290"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.333162" elapsed="0.110186"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.331570" elapsed="0.111902"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.330894" elapsed="0.112677"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.444743" level="INFO">${next} = 18576</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.443985" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.446118" level="INFO">${current_port} = 18576</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.445214" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.326415" elapsed="0.119931"/>
</kw>
<msg time="2026-08-15T23:56:44.446433" level="INFO">Repeating keyword, round 747/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.448931" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.448756" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.448723" elapsed="0.000299"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.449453" level="INFO">${current_Date} = 2026-08-15 23:56:44.449</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.449226" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.450155" level="INFO">${ellapsed_seconds} = 2585.888</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.449696" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.450630" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.450290" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.450265" elapsed="0.000476"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.448238" elapsed="0.002585"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.451669" level="INFO">${number} = 747</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.451029" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.453725" level="INFO">${number} = 747</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.453252" elapsed="0.000511"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.456541" level="INFO">${device-port} = 18576</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.455401" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.460480" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.492158" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.492380" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.460341" elapsed="0.032098"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.493360" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:44.493493" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.492604" elapsed="0.001076">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.492558" elapsed="0.001221">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.459568" elapsed="0.034523">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.459033" elapsed="0.035201"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.495091" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18576 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.559971" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.560203" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.494577" elapsed="0.065681"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.560377" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:44.560854" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.458425" elapsed="0.102549"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.561554" elapsed="0.000925"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.457304" elapsed="0.105363"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.454737" elapsed="0.108165"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.454007" elapsed="0.109000"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.452608" elapsed="0.110526"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.451983" elapsed="0.111246"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.564435" level="INFO">${next} = 18577</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.563572" elapsed="0.000923"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.565393" level="INFO">${current_port} = 18577</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.564846" elapsed="0.000605"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.446912" elapsed="0.118619"/>
</kw>
<msg time="2026-08-15T23:56:44.565585" level="INFO">Repeating keyword, round 748/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.567216" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.567060" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.567033" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.567825" level="INFO">${current_Date} = 2026-08-15 23:56:44.568</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.567560" elapsed="0.000304"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.568514" level="INFO">${ellapsed_seconds} = 2585.769</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.568074" elapsed="0.000476"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.569011" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.568653" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.568624" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.566704" elapsed="0.002482"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.569924" level="INFO">${number} = 748</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.569390" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.571960" level="INFO">${number} = 748</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.571444" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.574705" level="INFO">${device-port} = 18577</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.573598" elapsed="0.001249"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.578134" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.611963" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.612188" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.577785" elapsed="0.034463"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.613163" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:44.613299" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.612413" elapsed="0.000993">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.612367" elapsed="0.001129">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.577507" elapsed="0.036263">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.577118" elapsed="0.036895"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.614873" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18577 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.680029" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.680239" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.614363" elapsed="0.065929"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.680402" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:44.680874" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.576611" elapsed="0.104377"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.681542" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.575460" elapsed="0.107144"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.572979" elapsed="0.109812"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.572218" elapsed="0.110723"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.570821" elapsed="0.112245"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.570179" elapsed="0.112982"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.684323" level="INFO">${next} = 18578</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.683531" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.685638" level="INFO">${current_port} = 18578</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.684742" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.565915" elapsed="0.120015"/>
</kw>
<msg time="2026-08-15T23:56:44.686017" level="INFO">Repeating keyword, round 749/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.688538" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.688294" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.688251" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.689366" level="INFO">${current_Date} = 2026-08-15 23:56:44.689</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.689038" elapsed="0.000365"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.690057" level="INFO">${ellapsed_seconds} = 2585.648</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.689612" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.690518" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.690193" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.690165" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.687734" elapsed="0.002959"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.691427" level="INFO">${number} = 749</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.690918" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.693469" level="INFO">${number} = 749</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.692995" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.696270" level="INFO">${device-port} = 18578</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.695133" elapsed="0.001248"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.699939" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.731844" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.732069" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.699697" elapsed="0.032432"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.733032" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:44.733166" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.732293" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.732247" elapsed="0.001217">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.699274" elapsed="0.034464">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.698702" elapsed="0.035212"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.734743" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18578 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.800239" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.800485" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.734265" elapsed="0.066279"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.800665" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:56:44.801140" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.698128" elapsed="0.103127"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.801874" elapsed="0.000887"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.697014" elapsed="0.105979"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.694473" elapsed="0.108709"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.693729" elapsed="0.109550"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.692349" elapsed="0.111094"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.691704" elapsed="0.111835"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.804695" level="INFO">${next} = 18579</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.803932" elapsed="0.000824"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.806077" level="INFO">${current_port} = 18579</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.805176" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.686433" elapsed="0.119871"/>
</kw>
<msg time="2026-08-15T23:56:44.806388" level="INFO">Repeating keyword, round 750/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.809027" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.808745" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.808702" elapsed="0.000469"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.809967" level="INFO">${current_Date} = 2026-08-15 23:56:44.810</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.809577" elapsed="0.000452"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.811084" level="INFO">${ellapsed_seconds} = 2585.527</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.810365" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.811856" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.811301" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.811259" elapsed="0.000678"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.808209" elapsed="0.003775"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.812507" level="INFO">${number} = 750</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.812131" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.813963" level="INFO">${number} = 750</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.813606" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.815987" level="INFO">${device-port} = 18579</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.815157" elapsed="0.000913"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.818553" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.852373" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.852769" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.818447" elapsed="0.034424"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.854136" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:56:44.854290" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.853149" elapsed="0.001260">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.853068" elapsed="0.001446">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.818167" elapsed="0.036704">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.817749" elapsed="0.037394"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.856156" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18579 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:44.924312" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.924491" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.855578" elapsed="0.068953"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:44.924614" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:44.925187" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.817331" elapsed="0.107969"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:44.925962" elapsed="0.001014"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.816511" elapsed="0.110663"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.814683" elapsed="0.112737"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.814150" elapsed="0.113380"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.813158" elapsed="0.114506"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.812693" elapsed="0.115075"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.929093" level="INFO">${next} = 18580</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.928180" elapsed="0.000975"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.930504" level="INFO">${current_port} = 18580</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:44.929547" elapsed="0.001052"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.806875" elapsed="0.123858"/>
</kw>
<msg time="2026-08-15T23:56:44.930881" level="INFO">Repeating keyword, round 751/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:44.933647" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:44.933391" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.933342" elapsed="0.000453"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.934545" level="INFO">${current_Date} = 2026-08-15 23:56:44.934</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:44.934167" elapsed="0.000442"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:44.935827" level="INFO">${ellapsed_seconds} = 2585.403</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:44.934978" elapsed="0.000881"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.936205" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:44.935933" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:44.935912" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:44.932838" elapsed="0.003493"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.936885" level="INFO">${number} = 751</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.936478" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.938362" level="INFO">${number} = 751</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.938007" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:44.940408" level="INFO">${device-port} = 18580</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:44.939591" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.943113" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:44.976107" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:44.976346" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.942931" elapsed="0.033474"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:44.977372" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:44.977509" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:44.976579" elapsed="0.001159">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:44.976529" elapsed="0.001342">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:44.942618" elapsed="0.035558">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:44.942215" elapsed="0.036110"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:44.979287" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18580 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.043971" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.044183" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:44.978684" elapsed="0.065554"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.044350" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:45.044760" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:44.941770" elapsed="0.103148"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.045480" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:44.940972" elapsed="0.105609"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:44.939126" elapsed="0.107645"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:44.938550" elapsed="0.108378"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.937531" elapsed="0.109524"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:44.937072" elapsed="0.110110"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.048322" level="INFO">${next} = 18581</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.047526" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.049659" level="INFO">${current_port} = 18581</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.048742" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:44.931407" elapsed="0.118549"/>
</kw>
<msg time="2026-08-15T23:56:45.050043" level="INFO">Repeating keyword, round 752/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.052198" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.052086" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.052067" elapsed="0.000196"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.052610" level="INFO">${current_Date} = 2026-08-15 23:56:45.053</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.052445" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.053137" level="INFO">${ellapsed_seconds} = 2585.284</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.052792" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.053481" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.053235" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.053216" elapsed="0.000345"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.051837" elapsed="0.001769"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.054139" level="INFO">${number} = 752</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.053753" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.055594" level="INFO">${number} = 752</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.055251" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.057666" level="INFO">${device-port} = 18581</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.056788" elapsed="0.000960"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.060281" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.095491" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.095714" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.060177" elapsed="0.035607"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.096693" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:45.096860" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.095988" elapsed="0.000980">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.095941" elapsed="0.001120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.059898" elapsed="0.037435">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.059476" elapsed="0.038066"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.098408" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18581 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.163909" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.164140" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.097922" elapsed="0.066273"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.164311" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:45.164725" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.059032" elapsed="0.105851"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.165455" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.058215" elapsed="0.108335"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.056338" elapsed="0.110396"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.055790" elapsed="0.111094"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.054771" elapsed="0.112262"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.054323" elapsed="0.112809"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.168268" level="INFO">${next} = 18582</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.167476" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.169601" level="INFO">${current_port} = 18582</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.168697" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.050466" elapsed="0.119420"/>
</kw>
<msg time="2026-08-15T23:56:45.169978" level="INFO">Repeating keyword, round 753/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.172564" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.172313" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.172269" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.173420" level="INFO">${current_Date} = 2026-08-15 23:56:45.173</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.173071" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.174532" level="INFO">${ellapsed_seconds} = 2585.164</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.173839" elapsed="0.000751"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.175368" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.174747" elapsed="0.000746"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.174704" elapsed="0.000844"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.171742" elapsed="0.003916"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.176300" level="INFO">${number} = 753</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.175933" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.177740" level="INFO">${number} = 753</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.177399" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.179741" level="INFO">${device-port} = 18582</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.178955" elapsed="0.000886"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.182452" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.215994" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.216214" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.182196" elapsed="0.034076"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.217191" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:45.217324" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.216436" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.216390" elapsed="0.001238">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.181920" elapsed="0.036015">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.181506" elapsed="0.036573"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.218995" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18582 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.287670" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.287943" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.218422" elapsed="0.069589"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.288124" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:45.288559" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.181087" elapsed="0.107600"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.289294" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.180282" elapsed="0.110066"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.178470" elapsed="0.112061"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.177943" elapsed="0.112687"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.176954" elapsed="0.113797"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.176483" elapsed="0.114434"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.292061" level="INFO">${next} = 18583</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.291269" elapsed="0.000853"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.293442" level="INFO">${current_port} = 18583</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.292523" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.170408" elapsed="0.123256"/>
</kw>
<msg time="2026-08-15T23:56:45.293766" level="INFO">Repeating keyword, round 754/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.296529" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.296262" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.296219" elapsed="0.000453"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.297466" level="INFO">${current_Date} = 2026-08-15 23:56:45.297</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.297104" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.298602" level="INFO">${ellapsed_seconds} = 2585.04</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.297891" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.299461" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.298905" elapsed="0.000682"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.298777" elapsed="0.000863"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.295670" elapsed="0.004054"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.300273" level="INFO">${number} = 754</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.299891" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.301739" level="INFO">${number} = 754</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.301391" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.303784" level="INFO">${device-port} = 18583</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.302977" elapsed="0.000909"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.306567" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.340079" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.340324" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.306311" elapsed="0.034077"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.341395" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:45.341540" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.340573" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.340515" elapsed="0.001240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.306022" elapsed="0.036070">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.305584" elapsed="0.036734"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.343309" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18583 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.407908" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.408133" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.342706" elapsed="0.065484"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.408307" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:45.408730" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.305168" elapsed="0.103736"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.409514" elapsed="0.000937"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.304328" elapsed="0.106341"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.302482" elapsed="0.108477"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.301940" elapsed="0.109132"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.300938" elapsed="0.110265"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.300469" elapsed="0.110838"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.412541" level="INFO">${next} = 18584</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.411679" elapsed="0.000927"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.414059" level="INFO">${current_port} = 18584</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.413044" elapsed="0.001130"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.294260" elapsed="0.120053"/>
</kw>
<msg time="2026-08-15T23:56:45.414414" level="INFO">Repeating keyword, round 755/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.416585" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.416427" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.416400" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.417128" level="INFO">${current_Date} = 2026-08-15 23:56:45.417</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.416913" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.417854" level="INFO">${ellapsed_seconds} = 2584.92</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.417371" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.418334" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.418005" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.417978" elapsed="0.000465"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.416081" elapsed="0.002427"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.419273" level="INFO">${number} = 755</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.418730" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.421312" level="INFO">${number} = 755</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.420829" elapsed="0.000521"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.424140" level="INFO">${device-port} = 18584</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.423020" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.427493" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.459872" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.460092" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.427393" elapsed="0.032757"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.461090" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:45.461222" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.460312" elapsed="0.001108">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.460268" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.426951" elapsed="0.034897">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.426502" elapsed="0.035500"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.463032" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18584 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.527790" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.528081" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.462348" elapsed="0.065793"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.528264" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:45.528711" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.426085" elapsed="0.102813"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.529544" elapsed="0.001142"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.424901" elapsed="0.106053"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.422323" elapsed="0.108841"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.421577" elapsed="0.109696"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.420182" elapsed="0.111225"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.419526" elapsed="0.111983"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.532776" level="INFO">${next} = 18585</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.531955" elapsed="0.000951"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.534319" level="INFO">${current_port} = 18585</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.533319" elapsed="0.001104"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.414980" elapsed="0.119639"/>
</kw>
<msg time="2026-08-15T23:56:45.534729" level="INFO">Repeating keyword, round 756/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.536998" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.536778" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.536744" elapsed="0.000359"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.537582" level="INFO">${current_Date} = 2026-08-15 23:56:45.537</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.537358" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.538298" level="INFO">${ellapsed_seconds} = 2584.8</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.537856" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.538793" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.538438" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.538412" elapsed="0.000521"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.536373" elapsed="0.002628"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.539756" level="INFO">${number} = 756</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.539210" elapsed="0.000619"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.541951" level="INFO">${number} = 756</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.541441" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.545062" level="INFO">${device-port} = 18585</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.543770" elapsed="0.001410"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.548748" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.579953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.580173" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.548650" elapsed="0.031580"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.581135" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:45.581271" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.580393" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.580347" elapsed="0.001119">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.548371" elapsed="0.033363">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.547665" elapsed="0.034312"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.582890" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18585 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.647976" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.648185" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.582328" elapsed="0.065912"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.648349" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:45.648766" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.547060" elapsed="0.101887"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.649505" elapsed="0.000916"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.545835" elapsed="0.104818"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.543056" elapsed="0.107819"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.542216" elapsed="0.108761"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.540726" elapsed="0.110375"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.540066" elapsed="0.111130"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.652379" level="INFO">${next} = 18586</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.651552" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.653719" level="INFO">${current_port} = 18586</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.652869" elapsed="0.000983"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.535261" elapsed="0.118725"/>
</kw>
<msg time="2026-08-15T23:56:45.654075" level="INFO">Repeating keyword, round 757/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.656746" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.656502" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.656460" elapsed="0.000482"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.657623" level="INFO">${current_Date} = 2026-08-15 23:56:45.657</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.657267" elapsed="0.000416"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.658862" level="INFO">${ellapsed_seconds} = 2584.68</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.658053" elapsed="0.000844"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.659204" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.658970" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.658951" elapsed="0.000332"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.655972" elapsed="0.003356"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.659863" level="INFO">${number} = 757</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.659479" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.661298" level="INFO">${number} = 757</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.660964" elapsed="0.000361"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.663304" level="INFO">${device-port} = 18586</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.662510" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.666115" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.699523" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.699761" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.666019" elapsed="0.033854"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.700748" elapsed="0.000098"/>
</kw>
<msg time="2026-08-15T23:56:45.700936" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.700043" elapsed="0.001072">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.699998" elapsed="0.001215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.665719" elapsed="0.035761">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.665159" elapsed="0.036460"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.702525" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18586 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.768014" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.768222" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.701991" elapsed="0.066286"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.768385" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:45.768781" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.664717" elapsed="0.104224"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.769489" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.663938" elapsed="0.106649"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.662035" elapsed="0.108741"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.661486" elapsed="0.109437"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.660494" elapsed="0.110555"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.660045" elapsed="0.111097"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.772274" level="INFO">${next} = 18587</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.771485" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.773580" level="INFO">${current_port} = 18587</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.772691" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.654606" elapsed="0.119257"/>
</kw>
<msg time="2026-08-15T23:56:45.773955" level="INFO">Repeating keyword, round 758/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.776621" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.776357" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.776315" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.777540" level="INFO">${current_Date} = 2026-08-15 23:56:45.777</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.777198" elapsed="0.000400"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.778699" level="INFO">${ellapsed_seconds} = 2584.56</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.777960" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.779141" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.778906" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.778887" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.775774" elapsed="0.003493"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.779775" level="INFO">${number} = 758</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.779412" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.781229" level="INFO">${number} = 758</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.780887" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.783238" level="INFO">${device-port} = 18587</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.782436" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.788444" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.820024" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.820238" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.788345" elapsed="0.031952"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.821196" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:45.821330" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.820458" elapsed="0.000976">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.820413" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.788055" elapsed="0.033734">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.785006" elapsed="0.037017"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.822911" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18587 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:45.892267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.892471" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.822400" elapsed="0.070125"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:45.892633" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:45.893075" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.784570" elapsed="0.108613"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:45.893730" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.783750" elapsed="0.111134"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.781949" elapsed="0.113128"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.781413" elapsed="0.113764"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.780415" elapsed="0.114885"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.779974" elapsed="0.115422"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.896653" level="INFO">${next} = 18588</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.895739" elapsed="0.000976"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.898031" level="INFO">${current_port} = 18588</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:45.897137" elapsed="0.000992"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.774494" elapsed="0.123791"/>
</kw>
<msg time="2026-08-15T23:56:45.898370" level="INFO">Repeating keyword, round 759/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:45.900876" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:45.900603" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.900562" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.901683" level="INFO">${current_Date} = 2026-08-15 23:56:45.902</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:45.901342" elapsed="0.000400"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:45.902848" level="INFO">${ellapsed_seconds} = 2584.435</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:45.902102" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.903310" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:45.902984" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:45.902958" elapsed="0.000461"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:45.900080" elapsed="0.003405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.904215" level="INFO">${number} = 759</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.903685" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.906230" level="INFO">${number} = 759</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.905721" elapsed="0.000547"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:45.908994" level="INFO">${device-port} = 18588</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:45.907889" elapsed="0.001215"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.912941" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:45.943901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:45.944116" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.912696" elapsed="0.031479"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:45.945206" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:45.945343" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:45.944388" elapsed="0.001148">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:45.944328" elapsed="0.001308">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:45.912070" elapsed="0.033908">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:45.911445" elapsed="0.034739"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:45.946994" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18588 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.012290" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.012564" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:45.946556" elapsed="0.066068"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.012762" elapsed="0.000138"/>
</return>
<msg time="2026-08-15T23:56:46.013289" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:45.910875" elapsed="0.102531"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.014107" elapsed="0.001027"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:45.909706" elapsed="0.105614"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:45.907239" elapsed="0.108271"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:45.906492" elapsed="0.109117"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.905103" elapsed="0.110630"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:45.904464" elapsed="0.111409"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.017022" level="INFO">${next} = 18589</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.016223" elapsed="0.000859"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.018363" level="INFO">${current_port} = 18589</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.017442" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:45.898780" elapsed="0.119806"/>
</kw>
<msg time="2026-08-15T23:56:46.018671" level="INFO">Repeating keyword, round 760/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.021267" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.021021" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.020977" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.022263" level="INFO">${current_Date} = 2026-08-15 23:56:46.022</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.021857" elapsed="0.000464"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.023162" level="INFO">${ellapsed_seconds} = 2584.315</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.022655" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.023673" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.023307" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.023280" elapsed="0.000508"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.020462" elapsed="0.003417"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.024644" level="INFO">${number} = 760</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.024100" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.026845" level="INFO">${number} = 760</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.026318" elapsed="0.000567"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.029780" level="INFO">${device-port} = 18589</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.028601" elapsed="0.001332"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.033358" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.060092" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.060372" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.033047" elapsed="0.027384"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.061470" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:46.061609" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.060640" elapsed="0.001081">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.060578" elapsed="0.001268">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.032694" elapsed="0.029479">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.032292" elapsed="0.030130"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.063328" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18589 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.128233" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.128525" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.062795" elapsed="0.065787"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.128723" elapsed="0.000141"/>
</return>
<msg time="2026-08-15T23:56:46.129256" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.031869" elapsed="0.097496"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.130043" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.030605" elapsed="0.100600"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.027935" elapsed="0.103461"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.027122" elapsed="0.104378"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.025605" elapsed="0.106024"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.024941" elapsed="0.106788"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.132945" level="INFO">${next} = 18590</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.132123" elapsed="0.000881"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.134294" level="INFO">${current_port} = 18590</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.133366" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.019178" elapsed="0.115339"/>
</kw>
<msg time="2026-08-15T23:56:46.134605" level="INFO">Repeating keyword, round 761/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.137368" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.137116" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.137070" elapsed="0.000443"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.138025" level="INFO">${current_Date} = 2026-08-15 23:56:46.138</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.137810" elapsed="0.000243"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.138551" level="INFO">${ellapsed_seconds} = 2584.199</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.138206" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.138929" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.138648" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.138628" elapsed="0.000381"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.136445" elapsed="0.002609"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.139570" level="INFO">${number} = 761</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.139200" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.141057" level="INFO">${number} = 761</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.140678" elapsed="0.000406"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.143083" level="INFO">${device-port} = 18590</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.142281" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.145661" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.179757" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.179961" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.145551" elapsed="0.034439"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.180562" elapsed="0.000030"/>
</kw>
<msg time="2026-08-15T23:56:46.180631" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.180121" elapsed="0.000651">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.180077" elapsed="0.000762">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.145267" elapsed="0.035733">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.144869" elapsed="0.036203"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.181511" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18590 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.258009" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.258239" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.181260" elapsed="0.077009"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.258366" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:46.258675" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.144431" elapsed="0.114298"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.259429" elapsed="0.000999"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.143604" elapsed="0.117019"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.141787" elapsed="0.119072"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.141247" elapsed="0.119721"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.140226" elapsed="0.120869"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.139754" elapsed="0.121437"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.262416" level="INFO">${next} = 18591</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.261550" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.263759" level="INFO">${current_port} = 18591</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.262887" elapsed="0.001032"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.135126" elapsed="0.128924"/>
</kw>
<msg time="2026-08-15T23:56:46.264137" level="INFO">Repeating keyword, round 762/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.266757" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.266505" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.266460" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.267731" level="INFO">${current_Date} = 2026-08-15 23:56:46.268</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.267371" elapsed="0.000420"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.268886" level="INFO">${ellapsed_seconds} = 2584.069</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.268160" elapsed="0.000786"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.269642" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.269104" elapsed="0.000732"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.269064" elapsed="0.000834"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.265968" elapsed="0.004034"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.270958" level="INFO">${number} = 762</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.270330" elapsed="0.000655"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.272494" level="INFO">${number} = 762</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.272064" elapsed="0.000457"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.274630" level="INFO">${device-port} = 18591</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.273715" elapsed="0.001000"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.277354" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.304258" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.304567" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.277239" elapsed="0.027388"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.305765" elapsed="0.000093"/>
</kw>
<msg time="2026-08-15T23:56:46.305944" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.304892" elapsed="0.001167">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.304786" elapsed="0.001373">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.276945" elapsed="0.029521">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.276445" elapsed="0.030268"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.307655" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18591 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.371938" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.372153" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.307132" elapsed="0.065077"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.372326" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:46.372768" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.276022" elapsed="0.096909"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.373506" elapsed="0.000964"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.275192" elapsed="0.099473"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.273257" elapsed="0.101650"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.272685" elapsed="0.102331"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.271596" elapsed="0.103547"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.271142" elapsed="0.104100"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.376422" level="INFO">${next} = 18592</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.375593" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.377965" level="INFO">${current_port} = 18592</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.376889" elapsed="0.001178"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.264603" elapsed="0.113596"/>
</kw>
<msg time="2026-08-15T23:56:46.378288" level="INFO">Repeating keyword, round 763/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.380888" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.380608" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.380564" elapsed="0.000470"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.381795" level="INFO">${current_Date} = 2026-08-15 23:56:46.382</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.381375" elapsed="0.000515"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.382949" level="INFO">${ellapsed_seconds} = 2583.955</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.382232" elapsed="0.000744"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.383310" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.383049" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.383029" elapsed="0.000361"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.380068" elapsed="0.003368"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.383978" level="INFO">${number} = 763</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.383584" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.385428" level="INFO">${number} = 763</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.385081" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.387483" level="INFO">${device-port} = 18592</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.386648" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.390133" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.424239" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.424458" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.390028" elapsed="0.034489"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.425437" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:46.425573" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.424683" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.424637" elapsed="0.001304">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.389705" elapsed="0.036523">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.389287" elapsed="0.037085"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.427245" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18592 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.496357" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.496575" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.426724" elapsed="0.069906"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.496746" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:56:46.497206" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.388859" elapsed="0.108460"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.498014" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.388037" elapsed="0.111078"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.386194" elapsed="0.113115"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.385616" elapsed="0.113795"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.384613" elapsed="0.114924"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.384163" elapsed="0.115470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.500792" level="INFO">${next} = 18593</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.500031" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.502270" level="INFO">${current_port} = 18593</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.501270" elapsed="0.001113"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.378730" elapsed="0.123807"/>
</kw>
<msg time="2026-08-15T23:56:46.502627" level="INFO">Repeating keyword, round 764/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.505337" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.505092" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.505048" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.506101" level="INFO">${current_Date} = 2026-08-15 23:56:46.506</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.505894" elapsed="0.000235"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.506595" level="INFO">${ellapsed_seconds} = 2583.831</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.506282" elapsed="0.000339"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.506954" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.506693" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.506674" elapsed="0.000361"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.504522" elapsed="0.002559"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.507595" level="INFO">${number} = 764</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.507229" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.509045" level="INFO">${number} = 764</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.508687" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.511062" level="INFO">${device-port} = 18593</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.510262" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.513610" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.547946" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.548170" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.513480" elapsed="0.034749"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.549145" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:46.549283" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.548394" elapsed="0.000994">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.548348" elapsed="0.001163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.513205" elapsed="0.036587">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.512817" elapsed="0.037222"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.550933" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18593 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.616333" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.616547" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.550394" elapsed="0.066208"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.616715" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:46.617236" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.512385" elapsed="0.104981"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.618067" elapsed="0.001005"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.511581" elapsed="0.107688"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.509776" elapsed="0.109717"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.509235" elapsed="0.110378"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.508242" elapsed="0.111512"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.507777" elapsed="0.112135"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.621170" level="INFO">${next} = 18594</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.620312" elapsed="0.000920"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.622329" level="INFO">${current_port} = 18594</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.621734" elapsed="0.000656"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.503158" elapsed="0.119313"/>
</kw>
<msg time="2026-08-15T23:56:46.622526" level="INFO">Repeating keyword, round 765/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.624201" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.624048" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.624021" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.624709" level="INFO">${current_Date} = 2026-08-15 23:56:46.625</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.624494" elapsed="0.000254"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.625435" level="INFO">${ellapsed_seconds} = 2583.712</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.624977" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.625929" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.625579" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.625552" elapsed="0.000489"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.623666" elapsed="0.002437"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.626866" level="INFO">${number} = 765</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.626307" elapsed="0.000598"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.628889" level="INFO">${number} = 765</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.628387" elapsed="0.000539"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.631876" level="INFO">${device-port} = 18594</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.630668" elapsed="0.001337"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.635409" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.668357" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.668582" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.635145" elapsed="0.033495"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.669621" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:46.669756" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.668845" elapsed="0.001150">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.668760" elapsed="0.001343">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.634775" elapsed="0.035605">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.634379" elapsed="0.036152"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.671450" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18594 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.740444" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.740656" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.670943" elapsed="0.069768"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.740874" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:56:46.741356" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.633945" elapsed="0.107528"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.742088" elapsed="0.000973"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.632657" elapsed="0.110645"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.629991" elapsed="0.113531"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.629146" elapsed="0.114503"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.627742" elapsed="0.116123"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.627122" elapsed="0.116882"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.745537" level="INFO">${next} = 18595</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.744453" elapsed="0.001164"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.747313" level="INFO">${current_port} = 18595</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.746150" elapsed="0.001292"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.622862" elapsed="0.124752"/>
</kw>
<msg time="2026-08-15T23:56:46.747725" level="INFO">Repeating keyword, round 766/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.750605" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.750408" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.750373" elapsed="0.000345"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.751357" level="INFO">${current_Date} = 2026-08-15 23:56:46.751</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.751073" elapsed="0.000331"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.752262" level="INFO">${ellapsed_seconds} = 2583.586</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.751679" elapsed="0.000631"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.752893" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.752435" elapsed="0.000561"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.752402" elapsed="0.000638"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.749981" elapsed="0.003141"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.754100" level="INFO">${number} = 766</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.753422" elapsed="0.000724"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.756680" level="INFO">${number} = 766</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.756080" elapsed="0.000648"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.760438" level="INFO">${device-port} = 18595</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.758948" elapsed="0.001634"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.764625" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.791914" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.792108" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.764264" elapsed="0.027877"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.792767" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:46.792876" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.792284" elapsed="0.000661">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.792241" elapsed="0.000766">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.763893" elapsed="0.029334">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.763358" elapsed="0.030028"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.793839" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18595 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.860193" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.860408" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.793569" elapsed="0.066894"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.860579" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:56:46.861119" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.762771" elapsed="0.098498"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.861876" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.761491" elapsed="0.101517"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.758097" elapsed="0.105105"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.757063" elapsed="0.106243"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.755263" elapsed="0.108186"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.754431" elapsed="0.109131"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.864734" level="INFO">${next} = 18596</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.863959" elapsed="0.000834"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.866182" level="INFO">${current_port} = 18596</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.865243" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.748339" elapsed="0.118091"/>
</kw>
<msg time="2026-08-15T23:56:46.866519" level="INFO">Repeating keyword, round 767/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.869320" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.868992" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.868939" elapsed="0.000534"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.870237" level="INFO">${current_Date} = 2026-08-15 23:56:46.870</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.869983" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.870748" level="INFO">${ellapsed_seconds} = 2583.467</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.870412" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.871118" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.870860" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.870841" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.868416" elapsed="0.002827"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.871750" level="INFO">${number} = 767</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.871387" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.873229" level="INFO">${number} = 767</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.872870" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.875323" level="INFO">${device-port} = 18596</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.874471" elapsed="0.000941"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.878223" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:46.912189" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.912466" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.878118" elapsed="0.034411"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.913628" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:46.913795" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:46.912730" elapsed="0.001354">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:46.912669" elapsed="0.001517">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:46.877656" elapsed="0.036823">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:46.877241" elapsed="0.037384"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:46.915577" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18596 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:46.984461" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:46.984728" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:46.915052" elapsed="0.069733"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:46.984980" elapsed="0.000119"/>
</return>
<msg time="2026-08-15T23:56:46.985502" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:46.876728" elapsed="0.108891"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:46.986291" elapsed="0.001034"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:46.875916" elapsed="0.111607"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.873996" elapsed="0.113725"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.873413" elapsed="0.114458"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.872406" elapsed="0.115616"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.871959" elapsed="0.116166"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.989414" level="INFO">${next} = 18597</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.988486" elapsed="0.000991"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.990425" level="INFO">${current_port} = 18597</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:46.989850" elapsed="0.000636"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.867094" elapsed="0.123477"/>
</kw>
<msg time="2026-08-15T23:56:46.990627" level="INFO">Repeating keyword, round 768/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:46.992390" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:46.992225" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.992194" elapsed="0.000288"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.993060" level="INFO">${current_Date} = 2026-08-15 23:56:46.993</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:46.992759" elapsed="0.000344"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:46.993787" level="INFO">${ellapsed_seconds} = 2583.344</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:46.993327" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:46.994312" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:46.993947" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:46.993921" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:46.991853" elapsed="0.002637"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.995270" level="INFO">${number} = 768</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.994698" elapsed="0.000611"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:46.997385" level="INFO">${number} = 768</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.996857" elapsed="0.000566"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.000269" level="INFO">${device-port} = 18597</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:46.999109" elapsed="0.001282"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.003640" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.036504" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.036730" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.003535" elapsed="0.033262"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.037789" elapsed="0.000104"/>
</kw>
<msg time="2026-08-15T23:56:47.037979" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.037055" elapsed="0.001033">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.037007" elapsed="0.001173">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.003237" elapsed="0.035228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.002630" elapsed="0.036052"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.039603" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18597 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.108569" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.108902" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.039108" elapsed="0.069939"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.109404" elapsed="0.000223"/>
</return>
<msg time="2026-08-15T23:56:47.110058" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.002199" elapsed="0.107983"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.110914" elapsed="0.001096"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.001101" elapsed="0.111149"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:46.998434" elapsed="0.114029"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:46.997647" elapsed="0.114919"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.996194" elapsed="0.116502"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:46.995530" elapsed="0.117331"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.113976" level="INFO">${next} = 18598</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.113283" elapsed="0.000720"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.114565" level="INFO">${current_port} = 18598</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.114173" elapsed="0.000434"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:46.990978" elapsed="0.123688"/>
</kw>
<msg time="2026-08-15T23:56:47.114705" level="INFO">Repeating keyword, round 769/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.115885" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.115747" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.115727" elapsed="0.000223"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.116258" level="INFO">${current_Date} = 2026-08-15 23:56:47.116</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.116095" elapsed="0.000190"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.116755" level="INFO">${ellapsed_seconds} = 2583.221</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.116432" elapsed="0.000349"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.117149" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.116901" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.116849" elapsed="0.000378"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.115502" elapsed="0.001770"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.117782" level="INFO">${number} = 769</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.117418" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.119262" level="INFO">${number} = 769</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.118911" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.121259" level="INFO">${device-port} = 18598</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.120445" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.123996" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.159908" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.160121" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.123897" elapsed="0.036281"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.161160" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:47.161307" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.160339" elapsed="0.001161">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.160295" elapsed="0.001311">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.123599" elapsed="0.038330">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.123031" elapsed="0.039039"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.162915" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18598 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.228038" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.228264" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.162410" elapsed="0.065914"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.228442" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:47.228953" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.122578" elapsed="0.106496"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.229669" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.121779" elapsed="0.109015"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.119996" elapsed="0.111048"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.119447" elapsed="0.111704"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.118429" elapsed="0.112857"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.117982" elapsed="0.113407"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.232568" level="INFO">${next} = 18599</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.231767" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.233984" level="INFO">${current_port} = 18599</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.233045" elapsed="0.001033"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.114944" elapsed="0.119260"/>
</kw>
<msg time="2026-08-15T23:56:47.234288" level="INFO">Repeating keyword, round 770/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.237015" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.236691" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.236646" elapsed="0.000511"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.237936" level="INFO">${current_Date} = 2026-08-15 23:56:47.238</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.237550" elapsed="0.000449"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.239104" level="INFO">${ellapsed_seconds} = 2583.099</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.238356" elapsed="0.000806"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.239871" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.239318" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.239278" elapsed="0.000770"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.236090" elapsed="0.004058"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.241406" level="INFO">${number} = 770</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.240500" elapsed="0.000964"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.243161" level="INFO">${number} = 770</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.242816" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.245177" level="INFO">${device-port} = 18599</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.244355" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.250365" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.279875" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.280090" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.250266" elapsed="0.029883"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.281061" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:47.281195" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.280311" elapsed="0.000988">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.280266" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.249975" elapsed="0.031680">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.247045" elapsed="0.034879"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.282749" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18599 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.347918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.348126" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.282276" elapsed="0.065903"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.348287" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:47.348715" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.246601" elapsed="0.102264"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.349420" elapsed="0.000864"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.245701" elapsed="0.104770"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.243901" elapsed="0.106757"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.243354" elapsed="0.107417"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.242354" elapsed="0.108584"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.241862" elapsed="0.109173"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.352196" level="INFO">${next} = 18600</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.351375" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.353614" level="INFO">${current_port} = 18600</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.352687" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.234699" elapsed="0.119228"/>
</kw>
<msg time="2026-08-15T23:56:47.354023" level="INFO">Repeating keyword, round 771/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.356555" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.356317" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.356274" elapsed="0.000476"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.357435" level="INFO">${current_Date} = 2026-08-15 23:56:47.357</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.357098" elapsed="0.000394"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.358216" level="INFO">${ellapsed_seconds} = 2582.98</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.357865" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.358540" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.358311" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.358292" elapsed="0.000326"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.355765" elapsed="0.002898"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.359182" level="INFO">${number} = 771</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.358821" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.360586" level="INFO">${number} = 771</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.360253" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.362569" level="INFO">${device-port} = 18600</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.361765" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.365292" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.399648" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.399902" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.365195" elapsed="0.034767"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.400899" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:47.401033" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.400124" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.400079" elapsed="0.001225">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.364727" elapsed="0.036845">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.364328" elapsed="0.037408"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.402577" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18600 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.468065" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.468275" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.402106" elapsed="0.066224"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.468440" elapsed="0.000103"/>
</return>
<msg time="2026-08-15T23:56:47.468942" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.363912" elapsed="0.105148"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.469615" elapsed="0.000875"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.363107" elapsed="0.107571"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.361321" elapsed="0.109593"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.360786" elapsed="0.110232"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.359813" elapsed="0.111330"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.359361" elapsed="0.111876"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.472365" level="INFO">${next} = 18601</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.471583" elapsed="0.000842"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.473433" level="INFO">${current_port} = 18601</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.472893" elapsed="0.000598"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.354473" elapsed="0.119098"/>
</kw>
<msg time="2026-08-15T23:56:47.473625" level="INFO">Repeating keyword, round 772/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.475199" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.475047" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.475020" elapsed="0.000268"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.475743" level="INFO">${current_Date} = 2026-08-15 23:56:47.476</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.475531" elapsed="0.000252"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.476434" level="INFO">${ellapsed_seconds} = 2582.861</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.476015" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.476943" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.476596" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.476570" elapsed="0.000485"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.474689" elapsed="0.002428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.477852" level="INFO">${number} = 772</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.477324" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.479861" level="INFO">${number} = 772</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.479371" elapsed="0.000528"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.482737" level="INFO">${device-port} = 18601</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.481605" elapsed="0.001275"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.486311" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.520308" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.520571" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.486035" elapsed="0.034605"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.521552" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:47.521686" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.520848" elapsed="0.000943">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.520763" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.485683" elapsed="0.036502">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.485295" elapsed="0.037103"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.523342" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18601 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.592019" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.592229" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.522836" elapsed="0.069448"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.592423" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:47.592879" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.484792" elapsed="0.108203"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.593550" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.483499" elapsed="0.111122"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.480984" elapsed="0.113868"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.480120" elapsed="0.114840"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.478727" elapsed="0.116360"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.478107" elapsed="0.117076"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.596313" level="INFO">${next} = 18602</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.595529" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.597404" level="INFO">${current_port} = 18602</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.596853" elapsed="0.000609"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.473929" elapsed="0.123613"/>
</kw>
<msg time="2026-08-15T23:56:47.597595" level="INFO">Repeating keyword, round 773/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.599163" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.599011" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.598985" elapsed="0.000267"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.599665" level="INFO">${current_Date} = 2026-08-15 23:56:47.600</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.599454" elapsed="0.000248"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.600370" level="INFO">${ellapsed_seconds} = 2582.737</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.599935" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.600866" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.600513" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.600486" elapsed="0.000498"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.598659" elapsed="0.002388"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.601756" level="INFO">${number} = 773</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.601250" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.603833" level="INFO">${number} = 773</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.603299" elapsed="0.000574"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.606612" level="INFO">${device-port} = 18602</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.605497" elapsed="0.001227"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.610185" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.644109" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.644355" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.610088" elapsed="0.034328"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.645332" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:47.645464" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.644587" elapsed="0.001085">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.644537" elapsed="0.001236">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.609721" elapsed="0.036360">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.609328" elapsed="0.036894"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.647096" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18602 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.711975" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.712184" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.646571" elapsed="0.065698"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.712384" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:47.712788" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.608872" elapsed="0.104077"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.713506" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.607366" elapsed="0.107206"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.604865" elapsed="0.109897"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.604096" elapsed="0.110814"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.602657" elapsed="0.112380"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.602033" elapsed="0.113098"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.716278" level="INFO">${next} = 18603</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.715475" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.717615" level="INFO">${current_port} = 18603</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.716702" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.597898" elapsed="0.120006"/>
</kw>
<msg time="2026-08-15T23:56:47.717992" level="INFO">Repeating keyword, round 774/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.720529" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.720228" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.720185" elapsed="0.000489"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.721201" level="INFO">${current_Date} = 2026-08-15 23:56:47.721</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.721043" elapsed="0.000185"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.721680" level="INFO">${ellapsed_seconds} = 2582.616</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.721376" elapsed="0.000330"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.722028" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.721777" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.721759" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.719664" elapsed="0.002488"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.722659" level="INFO">${number} = 774</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.722296" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.724107" level="INFO">${number} = 774</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.723754" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.726135" level="INFO">${device-port} = 18603</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.725333" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.728681" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.764061" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.764349" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.728579" elapsed="0.035833"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.765326" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:47.765461" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.764578" elapsed="0.000989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.764532" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.728300" elapsed="0.037659">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.727886" elapsed="0.038293"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.767055" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18603 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.832020" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.832274" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.766536" elapsed="0.065796"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.832447" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:47.832893" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.727457" elapsed="0.105550"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.833559" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.726651" elapsed="0.107978"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.724875" elapsed="0.109987"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.724322" elapsed="0.110648"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.723306" elapsed="0.111791"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.722861" elapsed="0.112332"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.836362" level="INFO">${next} = 18604</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.835539" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.837684" level="INFO">${current_port} = 18604</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.836783" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.718410" elapsed="0.119568"/>
</kw>
<msg time="2026-08-15T23:56:47.838066" level="INFO">Repeating keyword, round 775/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.840595" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.840354" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.840310" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.841208" level="INFO">${current_Date} = 2026-08-15 23:56:47.841</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.841050" elapsed="0.000185"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.841685" level="INFO">${ellapsed_seconds} = 2582.496</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.841382" elapsed="0.000329"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.842032" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.841782" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.841762" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.839735" elapsed="0.002422"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.842664" level="INFO">${number} = 775</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.842301" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.844103" level="INFO">${number} = 775</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.843755" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.846090" level="INFO">${device-port} = 18604</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.845300" elapsed="0.000869"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.848612" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:47.884264" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.884484" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.848510" elapsed="0.036033"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.885456" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:47.885590" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:47.884707" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:47.884661" elapsed="0.001305">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.848236" elapsed="0.038003">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.847830" elapsed="0.038550"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.887252" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18604 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:47.952327" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:47.952563" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.886731" elapsed="0.065888"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:47.952738" elapsed="0.000118"/>
</return>
<msg time="2026-08-15T23:56:47.953207" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.847402" elapsed="0.105915"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:47.953934" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.846605" elapsed="0.108431"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.844854" elapsed="0.110372"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.844308" elapsed="0.111018"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.843311" elapsed="0.112140"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.842865" elapsed="0.112681"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.956725" level="INFO">${next} = 18605</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.955939" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.958091" level="INFO">${current_port} = 18605</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:47.957197" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.838483" elapsed="0.119833"/>
</kw>
<msg time="2026-08-15T23:56:47.958404" level="INFO">Repeating keyword, round 776/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:47.961002" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:47.960727" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.960684" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.961937" level="INFO">${current_Date} = 2026-08-15 23:56:47.962</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:47.961559" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:47.963050" level="INFO">${ellapsed_seconds} = 2582.375</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:47.962336" elapsed="0.000773"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:47.963791" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:47.963265" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:47.963225" elapsed="0.000823"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:47.960197" elapsed="0.003958"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.965037" level="INFO">${number} = 776</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.964497" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.966560" level="INFO">${number} = 776</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.966217" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:47.968558" level="INFO">${device-port} = 18605</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:47.967737" elapsed="0.000915"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:47.971162" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.004277" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.004498" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:47.971061" elapsed="0.033495"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.005464" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:48.005600" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.004717" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.004673" elapsed="0.001158">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:47.970756" elapsed="0.035360">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:47.970366" elapsed="0.035962"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.007192" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18605 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.072409" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.072618" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.006680" elapsed="0.065993"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.072784" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:56:48.073232" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:47.969942" elapsed="0.103399"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.073947" elapsed="0.000842"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:47.969125" elapsed="0.105889"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:47.967291" elapsed="0.107913"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:47.966746" elapsed="0.108558"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.965747" elapsed="0.109679"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:47.965281" elapsed="0.110242"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.076682" level="INFO">${next} = 18606</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.075939" elapsed="0.000803"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.078058" level="INFO">${current_port} = 18606</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.077166" elapsed="0.000989"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:47.958892" elapsed="0.119392"/>
</kw>
<msg time="2026-08-15T23:56:48.078372" level="INFO">Repeating keyword, round 777/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.080945" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.080673" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.080630" elapsed="0.000458"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.081762" level="INFO">${current_Date} = 2026-08-15 23:56:48.082</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.081422" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.082933" level="INFO">${ellapsed_seconds} = 2582.255</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.082185" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.083667" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.083149" elapsed="0.000640"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.083107" elapsed="0.000814"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.080140" elapsed="0.003891"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.085109" level="INFO">${number} = 777</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.084357" elapsed="0.000778"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.086548" level="INFO">${number} = 777</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.086211" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.088540" level="INFO">${device-port} = 18606</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.087718" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.091356" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.123953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.124170" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.091021" elapsed="0.033207"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.125132" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:48.125267" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.124392" elapsed="0.001062">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.124347" elapsed="0.001205">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.090698" elapsed="0.035157">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.090313" elapsed="0.035689"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.126854" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18606 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.192696" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.192948" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.126348" elapsed="0.066657"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.193115" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:48.193515" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.089902" elapsed="0.103723"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.194226" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.089088" elapsed="0.106199"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.087269" elapsed="0.108206"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.086732" elapsed="0.108843"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.085738" elapsed="0.109959"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.085290" elapsed="0.110579"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.197004" level="INFO">${next} = 18607</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.196220" elapsed="0.000844"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.198328" level="INFO">${current_port} = 18607</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.197442" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.078789" elapsed="0.119760"/>
</kw>
<msg time="2026-08-15T23:56:48.198633" level="INFO">Repeating keyword, round 778/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.201229" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.200984" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.200942" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.202151" level="INFO">${current_Date} = 2026-08-15 23:56:48.202</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.201767" elapsed="0.000443"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.203257" level="INFO">${ellapsed_seconds} = 2582.135</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.202540" elapsed="0.000776"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.204072" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.203474" elapsed="0.000727"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.203433" elapsed="0.000822"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.200424" elapsed="0.003932"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.205268" level="INFO">${number} = 778</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.204705" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.206717" level="INFO">${number} = 778</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.206379" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.208738" level="INFO">${device-port} = 18607</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.207964" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.211434" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.244505" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.244724" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.211190" elapsed="0.033593"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.245686" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:48.245868" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.244987" elapsed="0.000991">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.244941" elapsed="0.001131">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.210917" elapsed="0.035420">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.210493" elapsed="0.036048"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.247409" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18607 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.312148" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.312378" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.246925" elapsed="0.065511"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.312552" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:48.313005" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.210073" elapsed="0.103046"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.313691" elapsed="0.000915"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.209275" elapsed="0.105554"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.207443" elapsed="0.107595"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.206922" elapsed="0.108220"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.205916" elapsed="0.109354"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.205450" elapsed="0.109921"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.316556" level="INFO">${next} = 18608</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.315751" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.317948" level="INFO">${current_port} = 18608</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.317040" elapsed="0.001005"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.199127" elapsed="0.119044"/>
</kw>
<msg time="2026-08-15T23:56:48.318258" level="INFO">Repeating keyword, round 779/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.320868" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.320593" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.320551" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.321691" level="INFO">${current_Date} = 2026-08-15 23:56:48.322</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.321337" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.322789" level="INFO">${ellapsed_seconds} = 2582.015</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.322112" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.323560" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.323036" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.322994" elapsed="0.000794"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.320060" elapsed="0.003862"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.325092" level="INFO">${number} = 779</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.324246" elapsed="0.000905"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.326853" level="INFO">${number} = 779</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.326493" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.328962" level="INFO">${device-port} = 18608</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.328096" elapsed="0.000951"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.331743" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.364069" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.364289" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.331581" elapsed="0.032766"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.365283" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:48.365420" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.364515" elapsed="0.001092">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.364469" elapsed="0.001237">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.331142" elapsed="0.034878">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.330721" elapsed="0.035444"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.367028" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18608 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.431696" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.431940" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.366509" elapsed="0.065488"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.432106" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:48.432502" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.330306" elapsed="0.102304"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.433205" elapsed="0.000868"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.329489" elapsed="0.104771"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.327560" elapsed="0.106886"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.327039" elapsed="0.107506"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.326040" elapsed="0.108626"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.325526" elapsed="0.109234"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.435964" level="INFO">${next} = 18609</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.435149" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.437263" level="INFO">${current_port} = 18609</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.436381" elapsed="0.000978"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.318681" elapsed="0.118805"/>
</kw>
<msg time="2026-08-15T23:56:48.437572" level="INFO">Repeating keyword, round 780/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.440213" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.439964" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.439911" elapsed="0.000445"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.441124" level="INFO">${current_Date} = 2026-08-15 23:56:48.441</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.440747" elapsed="0.000436"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.442219" level="INFO">${ellapsed_seconds} = 2581.896</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.441517" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.442987" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.442435" elapsed="0.000678"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.442395" elapsed="0.000771"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.439358" elapsed="0.003909"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.444239" level="INFO">${number} = 780</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.443643" elapsed="0.000622"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.445680" level="INFO">${number} = 780</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.445330" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.447786" level="INFO">${device-port} = 18609</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.446999" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.450491" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.475634" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.475896" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.450395" elapsed="0.025565"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.476922" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:48.477061" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.476125" elapsed="0.001042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.476078" elapsed="0.001179">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.450119" elapsed="0.027406">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.449544" elapsed="0.028189"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.478597" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18609 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.543846" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.544052" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.478116" elapsed="0.065990"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.544214" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:48.544606" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.449128" elapsed="0.095588"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.545317" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.448318" elapsed="0.098055"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.446401" elapsed="0.100156"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.445884" elapsed="0.100825"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.444885" elapsed="0.101989"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.444422" elapsed="0.102552"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.548169" level="INFO">${next} = 18610</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.547318" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.549499" level="INFO">${current_port} = 18610</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.548602" elapsed="0.000992"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.438088" elapsed="0.111633"/>
</kw>
<msg time="2026-08-15T23:56:48.549869" level="INFO">Repeating keyword, round 781/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.552401" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.552155" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.552101" elapsed="0.000454"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.553248" level="INFO">${current_Date} = 2026-08-15 23:56:48.553</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.552908" elapsed="0.000399"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.554341" level="INFO">${ellapsed_seconds} = 2581.784</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.553637" elapsed="0.000763"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.555112" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.554554" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.554513" elapsed="0.000776"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.551580" elapsed="0.003856"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.556336" level="INFO">${number} = 781</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.555768" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.557776" level="INFO">${number} = 781</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.557440" elapsed="0.000378"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.559786" level="INFO">${device-port} = 18610</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.558973" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.562555" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.592120" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.592337" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.562459" elapsed="0.029935"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.593304" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:48.593436" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.592557" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.592511" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.562177" elapsed="0.031905">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.561594" elapsed="0.032628"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.595078" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18610 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.660099" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.660304" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.594570" elapsed="0.065788"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.660467" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:48.660910" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.561144" elapsed="0.099882"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.661581" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.560327" elapsed="0.102324"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.558501" elapsed="0.104384"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.557978" elapsed="0.105011"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.556985" elapsed="0.106125"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.556522" elapsed="0.106681"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.664347" level="INFO">${next} = 18611</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.663566" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.665666" level="INFO">${current_port} = 18611</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.664774" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.550301" elapsed="0.115655"/>
</kw>
<msg time="2026-08-15T23:56:48.666042" level="INFO">Repeating keyword, round 782/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.668607" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.668353" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.668311" elapsed="0.000445"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.669534" level="INFO">${current_Date} = 2026-08-15 23:56:48.669</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.669189" elapsed="0.000403"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.670628" level="INFO">${ellapsed_seconds} = 2581.668</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.669959" elapsed="0.000728"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.671451" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.670875" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.670832" elapsed="0.000798"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.667769" elapsed="0.003962"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.672469" level="INFO">${number} = 782</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.672087" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.673924" level="INFO">${number} = 782</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.673560" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.675955" level="INFO">${device-port} = 18611</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.675106" elapsed="0.000931"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.681090" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.712346" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.712771" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.680991" elapsed="0.031893"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.714231" elapsed="0.000157"/>
</kw>
<msg time="2026-08-15T23:56:48.714486" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.713197" elapsed="0.001415">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.713097" elapsed="0.001620">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.680684" elapsed="0.034402">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.677710" elapsed="0.037689"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.716454" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18611 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.780246" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.780636" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.715860" elapsed="0.064840"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.780926" elapsed="0.000146"/>
</return>
<msg time="2026-08-15T23:56:48.781529" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.677289" elapsed="0.104359"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.782411" elapsed="0.001216"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.676476" elapsed="0.107398"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.674631" elapsed="0.109385"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.674113" elapsed="0.109979"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.673112" elapsed="0.111071"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.672651" elapsed="0.111625"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.785098" level="INFO">${next} = 18612</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.784524" elapsed="0.000615"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.786026" level="INFO">${current_port} = 18612</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.785406" elapsed="0.000684"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.666471" elapsed="0.119707"/>
</kw>
<msg time="2026-08-15T23:56:48.786244" level="INFO">Repeating keyword, round 783/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.788288" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.788112" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.788078" elapsed="0.000306"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.788950" level="INFO">${current_Date} = 2026-08-15 23:56:48.789</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.788603" elapsed="0.000386"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.789822" level="INFO">${ellapsed_seconds} = 2581.548</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.789245" elapsed="0.000622"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.790366" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.789975" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.789946" elapsed="0.000542"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.787591" elapsed="0.002965"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.791339" level="INFO">${number} = 783</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.790764" elapsed="0.000613"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.793390" level="INFO">${number} = 783</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.792901" elapsed="0.000526"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.796306" level="INFO">${device-port} = 18612</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.795105" elapsed="0.001286"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.799560" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.832340" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.832563" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.799304" elapsed="0.033318"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.833550" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:48.833686" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.832789" elapsed="0.001137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.832743" elapsed="0.001285">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.798557" elapsed="0.035765">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.798155" elapsed="0.036312"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.835380" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18612 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:48.904173" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.904394" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.834840" elapsed="0.069609"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:48.904560" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:48.905006" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.797702" elapsed="0.107414"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:48.905668" elapsed="0.001057"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.796884" elapsed="0.110069"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.794443" elapsed="0.112738"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.793652" elapsed="0.113630"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.792251" elapsed="0.115155"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.791596" elapsed="0.115905"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.908641" level="INFO">${next} = 18613</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.907889" elapsed="0.000812"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.910014" level="INFO">${current_port} = 18613</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:48.909122" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.786611" elapsed="0.123627"/>
</kw>
<msg time="2026-08-15T23:56:48.910322" level="INFO">Repeating keyword, round 784/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:48.912556" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:48.912400" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.912373" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.913189" level="INFO">${current_Date} = 2026-08-15 23:56:48.913</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:48.912943" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:48.913884" level="INFO">${ellapsed_seconds} = 2581.424</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:48.913433" elapsed="0.000489"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.914356" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:48.914022" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:48.913996" elapsed="0.000470"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:48.912069" elapsed="0.002461"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.915291" level="INFO">${number} = 784</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.914735" elapsed="0.000593"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.917308" level="INFO">${number} = 784</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.916830" elapsed="0.000515"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:48.920153" level="INFO">${device-port} = 18613</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:48.919024" elapsed="0.001240"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.924061" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:48.956034" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:48.956277" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.923631" elapsed="0.032708"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:48.957287" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:48.957425" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:48.956511" elapsed="0.001024">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:48.956464" elapsed="0.001163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:48.923236" elapsed="0.034703">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:48.922610" elapsed="0.035605"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:48.959203" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18613 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.024319" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.024545" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:48.958588" elapsed="0.066014"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.024721" elapsed="0.000112"/>
</return>
<msg time="2026-08-15T23:56:49.025196" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:48.922026" elapsed="0.103285"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.025943" elapsed="0.000913"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:48.920905" elapsed="0.106190"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:48.918368" elapsed="0.108922"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:48.917568" elapsed="0.109825"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.916191" elapsed="0.111342"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:48.915544" elapsed="0.112088"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.028853" level="INFO">${next} = 18614</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.028035" elapsed="0.000882"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.030230" level="INFO">${current_port} = 18614</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.029285" elapsed="0.001049"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:48.910744" elapsed="0.119728"/>
</kw>
<msg time="2026-08-15T23:56:49.030558" level="INFO">Repeating keyword, round 785/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.033265" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.033011" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.032968" elapsed="0.000446"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.034136" level="INFO">${current_Date} = 2026-08-15 23:56:49.034</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.033751" elapsed="0.000445"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.035408" level="INFO">${ellapsed_seconds} = 2581.303</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.034530" elapsed="0.000941"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.036122" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.035638" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.035594" elapsed="0.000609"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.032424" elapsed="0.003825"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.036768" level="INFO">${number} = 785</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.036396" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.038247" level="INFO">${number} = 785</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.037893" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.040282" level="INFO">${device-port} = 18614</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.039479" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.042850" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.076194" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.076421" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.042726" elapsed="0.033754"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.077403" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:49.077535" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.076647" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.076602" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.042442" elapsed="0.035682">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.042050" elapsed="0.036214"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.079179" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18614 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.144429" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.144791" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.078614" elapsed="0.066275"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.145055" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:56:49.145588" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.041612" elapsed="0.104091"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.146477" elapsed="0.001425"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.040825" elapsed="0.107360"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.039021" elapsed="0.109432"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.038437" elapsed="0.110162"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.037418" elapsed="0.111371"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.036967" elapsed="0.112031"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.150435" level="INFO">${next} = 18615</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.149498" elapsed="0.001007"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.151940" level="INFO">${current_port} = 18615</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.150975" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.031095" elapsed="0.121083"/>
</kw>
<msg time="2026-08-15T23:56:49.152268" level="INFO">Repeating keyword, round 786/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.155272" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.154961" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.154768" elapsed="0.000654"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.156209" level="INFO">${current_Date} = 2026-08-15 23:56:49.156</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.155929" elapsed="0.000309"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.156756" level="INFO">${ellapsed_seconds} = 2581.181</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.156393" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.157146" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.156873" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.156853" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.154249" elapsed="0.003024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.157995" level="INFO">${number} = 786</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.157423" elapsed="0.000604"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.160352" level="INFO">${number} = 786</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.159749" elapsed="0.000632"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.163255" level="INFO">${device-port} = 18615</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.162086" elapsed="0.001275"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.166644" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.195765" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.196076" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.166513" elapsed="0.029626"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.197200" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:49.197350" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.196337" elapsed="0.001129">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.196279" elapsed="0.001286">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.166168" elapsed="0.031733">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.165662" elapsed="0.032487"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.199197" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18615 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.264057" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.264331" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.198570" elapsed="0.065819"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.264528" elapsed="0.000106"/>
</return>
<msg time="2026-08-15T23:56:49.265073" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.164956" elapsed="0.100232"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.266044" elapsed="0.001082"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.163995" elapsed="0.103333"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.161477" elapsed="0.106152"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.160646" elapsed="0.107118"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.158988" elapsed="0.109025"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.158261" elapsed="0.109864"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.269478" level="INFO">${next} = 18616</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.268490" elapsed="0.001051"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.271193" level="INFO">${current_port} = 18616</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.270049" elapsed="0.001255"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.152850" elapsed="0.118591"/>
</kw>
<msg time="2026-08-15T23:56:49.271573" level="INFO">Repeating keyword, round 787/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.274929" elapsed="0.000061"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.274525" elapsed="0.000566"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.274471" elapsed="0.000705"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.276063" level="INFO">${current_Date} = 2026-08-15 23:56:49.276</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.275577" elapsed="0.000523"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.276624" level="INFO">${ellapsed_seconds} = 2581.061</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.276262" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.277054" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.276725" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.276704" elapsed="0.000451"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.273858" elapsed="0.003346"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.277745" level="INFO">${number} = 787</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.277358" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.279444" level="INFO">${number} = 787</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.279026" elapsed="0.000446"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.281620" level="INFO">${device-port} = 18616</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.280737" elapsed="0.000967"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.284490" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.311956" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.312196" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.284374" elapsed="0.027882"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.313239" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:49.313381" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.312426" elapsed="0.001172">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.312379" elapsed="0.001350">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.284053" elapsed="0.030017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.283591" elapsed="0.030629"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.315160" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18616 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.380506" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.380798" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.314576" elapsed="0.066351"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.381049" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:49.381523" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.283140" elapsed="0.098527"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.382406" elapsed="0.001010"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.282230" elapsed="0.101388"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.280266" elapsed="0.103587"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.279635" elapsed="0.104332"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.278472" elapsed="0.105625"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.277968" elapsed="0.106227"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.385530" level="INFO">${next} = 18617</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.384599" elapsed="0.000997"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.387134" level="INFO">${current_port} = 18617</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.386055" elapsed="0.001184"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.272212" elapsed="0.115164"/>
</kw>
<msg time="2026-08-15T23:56:49.387513" level="INFO">Repeating keyword, round 788/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.390434" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.390078" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.390030" elapsed="0.000605"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.391271" level="INFO">${current_Date} = 2026-08-15 23:56:49.391</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.391095" elapsed="0.000204"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.391816" level="INFO">${ellapsed_seconds} = 2580.946</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.391453" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.392177" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.391920" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.391901" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.389428" elapsed="0.002879"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.392928" level="INFO">${number} = 788</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.392456" elapsed="0.000503"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.394439" level="INFO">${number} = 788</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.394074" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.396571" level="INFO">${device-port} = 18617</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.395702" elapsed="0.000956"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.399321" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.432348" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.432594" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.399217" elapsed="0.033448"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.433591" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:49.433727" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.432878" elapsed="0.000986">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.432788" elapsed="0.001174">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.398923" elapsed="0.035322">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.398447" elapsed="0.036021"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.435419" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18617 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.504367" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.504628" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.434907" elapsed="0.069781"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.504848" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:56:49.505341" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.398021" elapsed="0.107433"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.506108" elapsed="0.001128"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.397166" elapsed="0.110344"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.395225" elapsed="0.112504"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.394657" elapsed="0.113265"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.393580" elapsed="0.114571"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.393121" elapsed="0.115143"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.509530" level="INFO">${next} = 18618</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.508622" elapsed="0.000970"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.511169" level="INFO">${current_port} = 18618</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.510141" elapsed="0.001095"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.388016" elapsed="0.123303"/>
</kw>
<msg time="2026-08-15T23:56:49.511375" level="INFO">Repeating keyword, round 789/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.513005" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.512846" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.512797" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.513532" level="INFO">${current_Date} = 2026-08-15 23:56:49.513</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.513307" elapsed="0.000263"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.514247" level="INFO">${ellapsed_seconds} = 2580.824</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.513779" elapsed="0.000504"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.514750" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.514382" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.514355" elapsed="0.000529"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.512486" elapsed="0.002463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.515671" level="INFO">${number} = 789</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.515155" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.517730" level="INFO">${number} = 789</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.517238" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.520654" level="INFO">${device-port} = 18618</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.519487" elapsed="0.001281"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.524334" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.552462" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.552736" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.524061" elapsed="0.028795"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.553833" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:49.553975" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.553067" elapsed="0.001110">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.553017" elapsed="0.001262">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.523644" elapsed="0.030965">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.523245" elapsed="0.031515"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.555712" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18618 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.624386" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.624620" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.555144" elapsed="0.069533"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.624794" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:56:49.625254" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.522649" elapsed="0.102715"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.626044" elapsed="0.001007"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.521463" elapsed="0.105784"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.518831" elapsed="0.108607"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.518023" elapsed="0.109517"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.516586" elapsed="0.111079"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.515956" elapsed="0.111803"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.629117" level="INFO">${next} = 18619</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.628182" elapsed="0.000999"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.630646" level="INFO">${current_port} = 18619</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.629549" elapsed="0.001221"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.511658" elapsed="0.119369"/>
</kw>
<msg time="2026-08-15T23:56:49.631121" level="INFO">Repeating keyword, round 790/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.633649" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.633399" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.633355" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.634672" level="INFO">${current_Date} = 2026-08-15 23:56:49.634</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.634234" elapsed="0.000499"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.635523" level="INFO">${ellapsed_seconds} = 2580.703</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.635079" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.636020" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.635659" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.635633" elapsed="0.000500"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.632863" elapsed="0.003333"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.636973" level="INFO">${number} = 790</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.636401" elapsed="0.000632"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.639231" level="INFO">${number} = 790</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.638681" elapsed="0.000588"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.642221" level="INFO">${device-port} = 18619</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.641064" elapsed="0.001306"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.646276" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.676610" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.676897" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.645901" elapsed="0.031061"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.677910" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:49.678051" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.677140" elapsed="0.001020">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.677089" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.645422" elapsed="0.033169">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.644795" elapsed="0.034052"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.679706" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18619 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.748216" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.748445" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.679212" elapsed="0.069289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.748621" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:49.749099" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.644209" elapsed="0.105001"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.749778" elapsed="0.001013"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.643085" elapsed="0.107938"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.640340" elapsed="0.110878"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.639498" elapsed="0.111824"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.637971" elapsed="0.113479"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.637298" elapsed="0.114276"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.752746" level="INFO">${next} = 18620</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.751972" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.754180" level="INFO">${current_port} = 18620</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.753227" elapsed="0.001091"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.631557" elapsed="0.122914"/>
</kw>
<msg time="2026-08-15T23:56:49.754567" level="INFO">Repeating keyword, round 791/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.757420" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.757161" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.757117" elapsed="0.000446"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.758343" level="INFO">${current_Date} = 2026-08-15 23:56:49.758</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.757934" elapsed="0.000473"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.759293" level="INFO">${ellapsed_seconds} = 2580.579</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.758744" elapsed="0.000576"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.759652" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.759390" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.759372" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.756571" elapsed="0.003209"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.760316" level="INFO">${number} = 791</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.759946" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.761772" level="INFO">${number} = 791</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.761423" elapsed="0.000390"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.763796" level="INFO">${device-port} = 18620</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.763018" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.766642" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.800280" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.800520" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.766533" elapsed="0.034047"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.801545" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:49.801681" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.800750" elapsed="0.001240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.800702" elapsed="0.001395">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.766050" elapsed="0.036370">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.765612" elapsed="0.036957"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.803444" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18620 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:49.872483" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.872706" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.802955" elapsed="0.069806"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:49.872914" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:49.873329" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.765192" elapsed="0.108247"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:49.874044" elapsed="0.000928"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.764352" elapsed="0.110811"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.762528" elapsed="0.112821"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.761986" elapsed="0.113462"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.760970" elapsed="0.114600"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.760500" elapsed="0.115164"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.876860" level="INFO">${next} = 18621</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.876065" elapsed="0.000859"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.878217" level="INFO">${current_port} = 18621</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:49.877299" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.755130" elapsed="0.123312"/>
</kw>
<msg time="2026-08-15T23:56:49.878530" level="INFO">Repeating keyword, round 792/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:49.881132" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:49.880882" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.880836" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.882078" level="INFO">${current_Date} = 2026-08-15 23:56:49.882</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:49.881693" elapsed="0.000491"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:49.883173" level="INFO">${ellapsed_seconds} = 2580.455</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:49.882525" elapsed="0.000674"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.883516" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:49.883270" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:49.883252" elapsed="0.000344"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:49.880320" elapsed="0.003321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.884170" level="INFO">${number} = 792</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.883786" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.885623" level="INFO">${number} = 792</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.885281" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:49.887633" level="INFO">${device-port} = 18621</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:49.886852" elapsed="0.000863"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.890392" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:49.928597" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:49.928864" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.890293" elapsed="0.038635"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:49.929842" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:49.929983" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:49.929095" elapsed="0.001059">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:49.929049" elapsed="0.001204">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:49.890000" elapsed="0.040527">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:49.889403" elapsed="0.041339"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:49.931690" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18621 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.000347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.000605" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:49.931151" elapsed="0.069508"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.000784" elapsed="0.000124"/>
</return>
<msg time="2026-08-15T23:56:50.001232" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:49.888985" elapsed="0.112344"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.001921" elapsed="0.000807"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:49.888176" elapsed="0.114742"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:49.886382" elapsed="0.116714"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:49.885829" elapsed="0.117332"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.884823" elapsed="0.118412"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:49.884360" elapsed="0.118935"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.003945" level="INFO">${next} = 18622</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.003506" elapsed="0.000473"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.004591" level="INFO">${current_port} = 18622</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.004160" elapsed="0.000477"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:49.879035" elapsed="0.125670"/>
</kw>
<msg time="2026-08-15T23:56:50.004753" level="INFO">Repeating keyword, round 793/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.006386" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.006228" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.006199" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.006940" level="INFO">${current_Date} = 2026-08-15 23:56:50.007</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.006677" elapsed="0.000300"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.007670" level="INFO">${ellapsed_seconds} = 2580.33</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.007172" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.008170" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.007796" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.007769" elapsed="0.000525"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.005875" elapsed="0.002482"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.009075" level="INFO">${number} = 793</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.008567" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.010934" level="INFO">${number} = 793</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.010474" elapsed="0.000497"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.014105" level="INFO">${device-port} = 18622</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.012573" elapsed="0.001694"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.019682" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.052200" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.052431" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.019529" elapsed="0.032937"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.053239" elapsed="0.000043"/>
</kw>
<msg time="2026-08-15T23:56:50.053338" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.052631" elapsed="0.000899">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.052575" elapsed="0.001031">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.019131" elapsed="0.034701">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.017598" elapsed="0.036330"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.054534" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18622 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.124766" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.125140" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.054214" elapsed="0.070983"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.125349" elapsed="0.000107"/>
</return>
<msg time="2026-08-15T23:56:50.125920" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.016727" elapsed="0.109326"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.126678" elapsed="0.001030"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.015161" elapsed="0.112785"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.011953" elapsed="0.116187"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.011189" elapsed="0.117053"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.009878" elapsed="0.118491"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.009322" elapsed="0.119142"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.129625" level="INFO">${next} = 18623</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.128847" elapsed="0.000838"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.131056" level="INFO">${current_port} = 18623</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.130126" elapsed="0.001026"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.005065" elapsed="0.126219"/>
</kw>
<msg time="2026-08-15T23:56:50.131371" level="INFO">Repeating keyword, round 794/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.134134" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.133780" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.133735" elapsed="0.000548"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.135091" level="INFO">${current_Date} = 2026-08-15 23:56:50.135</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.134785" elapsed="0.000333"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.135697" level="INFO">${ellapsed_seconds} = 2580.202</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.135305" elapsed="0.000419"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.136121" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.135796" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.135777" elapsed="0.000426"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.133214" elapsed="0.003036"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.136868" level="INFO">${number} = 794</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.136402" elapsed="0.000498"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.138522" level="INFO">${number} = 794</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.138085" elapsed="0.000465"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.140683" level="INFO">${device-port} = 18623</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.139870" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.146293" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.172518" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.172850" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.146172" elapsed="0.026747"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.173966" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:50.174111" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.173114" elapsed="0.001107">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.173059" elapsed="0.001257">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.145745" elapsed="0.028865">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.142512" elapsed="0.032357"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.175724" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18623 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.245526" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.246022" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.175231" elapsed="0.070881"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.246326" elapsed="0.000141"/>
</return>
<msg time="2026-08-15T23:56:50.247075" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.142080" elapsed="0.105148"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.248040" elapsed="0.001230"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.141232" elapsed="0.108303"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.139365" elapsed="0.110470"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.138744" elapsed="0.111215"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.137523" elapsed="0.112573"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.137063" elapsed="0.113135"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.251237" level="INFO">${next} = 18624</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.250551" elapsed="0.000725"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.252155" level="INFO">${current_port} = 18624</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.251524" elapsed="0.000695"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.131882" elapsed="0.120425"/>
</kw>
<msg time="2026-08-15T23:56:50.252366" level="INFO">Repeating keyword, round 795/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.254349" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.254167" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.254133" elapsed="0.000316"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.254961" level="INFO">${current_Date} = 2026-08-15 23:56:50.255</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.254675" elapsed="0.000326"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.255713" level="INFO">${ellapsed_seconds} = 2580.082</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.255224" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.256252" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.255879" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.255850" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.253691" elapsed="0.002746"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.257226" level="INFO">${number} = 795</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.256652" elapsed="0.000613"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.259410" level="INFO">${number} = 795</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.258902" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.262463" level="INFO">${device-port} = 18624</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.261199" elapsed="0.001383"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.376017" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.388653" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.388771" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.375835" elapsed="0.012981"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.389781" elapsed="0.000093"/>
</kw>
<msg time="2026-08-15T23:56:50.389960" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.388926" elapsed="0.001262">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.388893" elapsed="0.001398">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.264886" elapsed="0.125715">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.264452" elapsed="0.126301"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.391641" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18624 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.464284" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.464496" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.391147" elapsed="0.073405"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.464667" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:50.465147" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.264036" elapsed="0.201224"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.465887" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.263212" elapsed="0.203814"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.260508" elapsed="0.206708"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.259686" elapsed="0.207632"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.258216" elapsed="0.209225"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.257497" elapsed="0.210039"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.468752" level="INFO">${next} = 18625</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.467927" elapsed="0.000938"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.470198" level="INFO">${current_port} = 18625</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.469238" elapsed="0.001060"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.252710" elapsed="0.217721"/>
</kw>
<msg time="2026-08-15T23:56:50.470517" level="INFO">Repeating keyword, round 796/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.473106" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.472852" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.472780" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.474109" level="INFO">${current_Date} = 2026-08-15 23:56:50.474</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.473697" elapsed="0.000445"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.474621" level="INFO">${ellapsed_seconds} = 2579.863</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.474292" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.474990" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.474718" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.474700" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.472294" elapsed="0.002824"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.475630" level="INFO">${number} = 796</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.475264" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.477087" level="INFO">${number} = 796</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.476727" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.479103" level="INFO">${device-port} = 18625</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.478292" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.482027" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.519485" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.519703" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.481928" elapsed="0.037834"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.520676" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:50.520843" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.519967" elapsed="0.000986">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.519920" elapsed="0.001127">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.481628" elapsed="0.039693">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.481217" elapsed="0.040367"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.522455" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18625 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.592252" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.592461" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.521970" elapsed="0.070546"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.592624" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:50.593073" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.480451" elapsed="0.112732"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.593777" elapsed="0.000889"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.479630" elapsed="0.115264"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.477841" elapsed="0.117248"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.477274" elapsed="0.117915"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.476284" elapsed="0.119027"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.475828" elapsed="0.119578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.596541" level="INFO">${next} = 18626</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.595751" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.597935" level="INFO">${current_port} = 18626</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.597016" elapsed="0.001017"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.471008" elapsed="0.127155"/>
</kw>
<msg time="2026-08-15T23:56:50.598248" level="INFO">Repeating keyword, round 797/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.600754" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.600508" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.600465" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.601649" level="INFO">${current_Date} = 2026-08-15 23:56:50.601</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.601255" elapsed="0.000454"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.602507" level="INFO">${ellapsed_seconds} = 2579.736</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.602082" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.602986" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.602640" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.602614" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.599979" elapsed="0.003182"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.603894" level="INFO">${number} = 797</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.603363" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.605948" level="INFO">${number} = 797</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.605416" elapsed="0.000569"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.608705" level="INFO">${device-port} = 18626</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.607591" elapsed="0.001258"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.612665" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.644271" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.644491" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.612523" elapsed="0.032027"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.645496" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:50.645633" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.644719" elapsed="0.001139">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.644672" elapsed="0.001289">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.612137" elapsed="0.034098">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.611491" elapsed="0.034884"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.647235" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18626 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.712490" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.712919" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.646721" elapsed="0.066264"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.713163" elapsed="0.000126"/>
</return>
<msg time="2026-08-15T23:56:50.713778" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.610903" elapsed="0.103037"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.714613" elapsed="0.001054"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.609481" elapsed="0.106434"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.606963" elapsed="0.109162"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.606208" elapsed="0.110028"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.604770" elapsed="0.111604"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.604149" elapsed="0.112327"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.717755" level="INFO">${next} = 18627</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.716883" elapsed="0.000992"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.718784" level="INFO">${current_port} = 18627</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.718207" elapsed="0.000668"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.598666" elapsed="0.120298"/>
</kw>
<msg time="2026-08-15T23:56:50.719023" level="INFO">Repeating keyword, round 798/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.720783" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.720616" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.720582" elapsed="0.000317"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.721472" level="INFO">${current_Date} = 2026-08-15 23:56:50.721</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.721210" elapsed="0.000300"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.722216" level="INFO">${ellapsed_seconds} = 2579.616</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.721722" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.722714" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.722354" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.722328" elapsed="0.000519"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.720260" elapsed="0.002654"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.723687" level="INFO">${number} = 798</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.723122" elapsed="0.000604"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.725756" level="INFO">${number} = 798</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.725252" elapsed="0.000542"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.728658" level="INFO">${device-port} = 18627</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.727506" elapsed="0.001411"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.732159" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.775062" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.775295" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.732054" elapsed="0.043300"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.776324" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:50.776465" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.775536" elapsed="0.001039">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.775475" elapsed="0.001196">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.731727" elapsed="0.045279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.731322" elapsed="0.045932"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.778217" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18627 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.848695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.849123" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.777660" elapsed="0.071525"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.849401" elapsed="0.000126"/>
</return>
<msg time="2026-08-15T23:56:50.850071" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.730889" elapsed="0.119337"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.851172" elapsed="0.001106"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.729612" elapsed="0.122872"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.726859" elapsed="0.125829"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.726041" elapsed="0.126799"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.724601" elapsed="0.128386"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.723966" elapsed="0.129128"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.854302" level="INFO">${next} = 18628</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.853516" elapsed="0.000825"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.855301" level="INFO">${current_port} = 18628</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.854582" elapsed="0.000790"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.719359" elapsed="0.136114"/>
</kw>
<msg time="2026-08-15T23:56:50.855544" level="INFO">Repeating keyword, round 799/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.857489" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.857228" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.857175" elapsed="0.000416"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.858088" level="INFO">${current_Date} = 2026-08-15 23:56:50.858</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.857832" elapsed="0.000293"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.858836" level="INFO">${ellapsed_seconds} = 2579.479</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.858336" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.859337" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.858974" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.858947" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.856852" elapsed="0.002660"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.860255" level="INFO">${number} = 799</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.859717" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.862440" level="INFO">${number} = 799</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.861952" elapsed="0.000526"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.865319" level="INFO">${device-port} = 18628</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.864146" elapsed="0.001292"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.868506" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:50.900898" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.901344" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.868401" elapsed="0.033027"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.902666" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:56:50.902852" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:50.901676" elapsed="0.001444">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:50.901604" elapsed="0.001623">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.868117" elapsed="0.035426">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.867679" elapsed="0.036018"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.904667" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18628 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:50.972656" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:50.972925" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.904124" elapsed="0.068861"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:50.973149" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:56:50.973628" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.867251" elapsed="0.106491"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:50.974394" elapsed="0.001029"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.866133" elapsed="0.109491"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.863485" elapsed="0.112381"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.862704" elapsed="0.113274"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.861294" elapsed="0.114817"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.860576" elapsed="0.115635"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.977466" level="INFO">${next} = 18629</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.976569" elapsed="0.000958"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.978904" level="INFO">${current_port} = 18629</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:50.977946" elapsed="0.001059"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.855945" elapsed="0.123194"/>
</kw>
<msg time="2026-08-15T23:56:50.979229" level="INFO">Repeating keyword, round 800/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:50.981979" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:50.981683" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.981639" elapsed="0.000480"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.982513" level="INFO">${current_Date} = 2026-08-15 23:56:50.982</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:50.982329" elapsed="0.000211"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:50.983082" level="INFO">${ellapsed_seconds} = 2579.355</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:50.982693" elapsed="0.000416"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:50.983444" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:50.983180" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:50.983162" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:50.981031" elapsed="0.002539"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.984115" level="INFO">${number} = 800</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.983717" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.985601" level="INFO">${number} = 800</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.985249" elapsed="0.000379"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:50.987873" level="INFO">${device-port} = 18629</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:50.986860" elapsed="0.001096"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:50.990711" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.024432" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.024659" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:50.990612" elapsed="0.034106"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.025736" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:51.025907" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.024977" elapsed="0.001038">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.024875" elapsed="0.001233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:50.990337" elapsed="0.036042">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:50.989937" elapsed="0.036652"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.027461" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18629 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.096609" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.096869" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.026976" elapsed="0.069953"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.097081" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:51.097495" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:50.989483" elapsed="0.108121"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.098212" elapsed="0.000885"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:50.988408" elapsed="0.110881"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:50.986366" elapsed="0.113114"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:50.985792" elapsed="0.113788"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.984755" elapsed="0.114947"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:50.984301" elapsed="0.115497"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.101011" level="INFO">${next} = 18630</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.100190" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.102345" level="INFO">${current_port} = 18630</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.101448" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:50.979672" elapsed="0.122894"/>
</kw>
<msg time="2026-08-15T23:56:51.102703" level="INFO">Repeating keyword, round 801/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.105330" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.105084" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.105036" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.106092" level="INFO">${current_Date} = 2026-08-15 23:56:51.106</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.105798" elapsed="0.000321"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.106576" level="INFO">${ellapsed_seconds} = 2579.231</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.106266" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.106927" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.106672" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.106653" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.104472" elapsed="0.002585"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.107565" level="INFO">${number} = 801</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.107202" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.109029" level="INFO">${number} = 801</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.108657" elapsed="0.000399"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.111025" level="INFO">${device-port} = 18630</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.110218" elapsed="0.000889"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.113773" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.148399" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.148627" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.113675" elapsed="0.035011"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.149659" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:51.149792" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.148900" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.148849" elapsed="0.001273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.113401" elapsed="0.037014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.113009" elapsed="0.037552"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.151427" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18630 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.220596" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.220878" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.150944" elapsed="0.069996"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.221057" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:51.221471" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.112558" elapsed="0.109025"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.222195" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.111550" elapsed="0.111738"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.109737" elapsed="0.113743"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.109216" elapsed="0.114364"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.108210" elapsed="0.115494"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.107748" elapsed="0.116091"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.225044" level="INFO">${next} = 18631</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.224195" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.226459" level="INFO">${current_port} = 18631</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.225501" elapsed="0.001079"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.103213" elapsed="0.123504"/>
</kw>
<msg time="2026-08-15T23:56:51.226874" level="INFO">Repeating keyword, round 802/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.229606" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.229357" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.229312" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.230254" level="INFO">${current_Date} = 2026-08-15 23:56:51.230</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.230093" elapsed="0.000188"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.230756" level="INFO">${ellapsed_seconds} = 2579.107</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.230441" elapsed="0.000342"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.231117" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.230872" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.230853" elapsed="0.000349"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.228696" elapsed="0.002553"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.231763" level="INFO">${number} = 802</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.231397" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.233245" level="INFO">${number} = 802</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.232891" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.235253" level="INFO">${device-port} = 18631</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.234449" elapsed="0.000886"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.238045" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.272240" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.272492" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.237944" elapsed="0.034611"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.273566" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:51.273704" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.272737" elapsed="0.001108">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.272685" elapsed="0.001258">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.237647" elapsed="0.036580">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.237250" elapsed="0.037206"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.275339" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18631 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.340659" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.340954" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.274840" elapsed="0.066176"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.341139" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:51.341578" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.236819" elapsed="0.104878"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.342339" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.235780" elapsed="0.107678"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.233985" elapsed="0.109666"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.233434" elapsed="0.110320"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.232412" elapsed="0.111527"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.231964" elapsed="0.112077"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.345259" level="INFO">${next} = 18632</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.344396" elapsed="0.000923"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.346608" level="INFO">${current_port} = 18632</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.345690" elapsed="0.001013"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.227356" elapsed="0.119545"/>
</kw>
<msg time="2026-08-15T23:56:51.346994" level="INFO">Repeating keyword, round 803/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.349368" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.349252" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.349232" elapsed="0.000200"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.349752" level="INFO">${current_Date} = 2026-08-15 23:56:51.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.349583" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.350279" level="INFO">${ellapsed_seconds} = 2578.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.349947" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.350627" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.350377" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.350357" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.348853" elapsed="0.001901"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.351287" level="INFO">${number} = 803</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.350918" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.352777" level="INFO">${number} = 803</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.352399" elapsed="0.000423"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.354841" level="INFO">${device-port} = 18632</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.354007" elapsed="0.000916"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.357655" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.397104" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.397336" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.357558" elapsed="0.039839"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.398439" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:56:51.398590" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.397570" elapsed="0.001219">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.397520" elapsed="0.001422">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.357282" elapsed="0.041996">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.356884" elapsed="0.042592"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.400428" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18632 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.464956" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.465180" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.399887" elapsed="0.065349"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.465423" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:56:51.466042" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.356417" elapsed="0.109766"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.466756" elapsed="0.000962"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.355374" elapsed="0.112584"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.353523" elapsed="0.114671"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.352990" elapsed="0.115316"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.351944" elapsed="0.116491"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.351473" elapsed="0.117060"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.469784" level="INFO">${next} = 18633</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.468969" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.471243" level="INFO">${current_port} = 18633</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.470302" elapsed="0.001061"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.347451" elapsed="0.124071"/>
</kw>
<msg time="2026-08-15T23:56:51.471611" level="INFO">Repeating keyword, round 804/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.473905" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.473722" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.473694" elapsed="0.000304"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.474477" level="INFO">${current_Date} = 2026-08-15 23:56:51.474</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.474254" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.475212" level="INFO">${ellapsed_seconds} = 2578.863</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.474752" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.475764" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.475353" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.475327" elapsed="0.000586"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.473352" elapsed="0.002629"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.476834" level="INFO">${number} = 804</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.476189" elapsed="0.000687"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.479006" level="INFO">${number} = 804</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.478457" elapsed="0.000591"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.481943" level="INFO">${device-port} = 18633</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.480735" elapsed="0.001327"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.485886" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.516463" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.516715" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.485770" elapsed="0.031007"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.517701" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:51.517876" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.516989" elapsed="0.000995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.516938" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.485491" elapsed="0.032857">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.485037" elapsed="0.033521"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.519432" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18633 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.588702" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.588958" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.518946" elapsed="0.070077"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.589153" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:51.589557" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.484189" elapsed="0.105477"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.590303" elapsed="0.000891"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.482689" elapsed="0.108695"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.480068" elapsed="0.111508"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.479277" elapsed="0.112400"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.477791" elapsed="0.114048"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.477099" elapsed="0.114845"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.593165" level="INFO">${next} = 18634</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.592291" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.594517" level="INFO">${current_port} = 18634</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.593589" elapsed="0.001022"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.472104" elapsed="0.122635"/>
</kw>
<msg time="2026-08-15T23:56:51.594888" level="INFO">Repeating keyword, round 805/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.597289" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.597168" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.597143" elapsed="0.000211"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.597654" level="INFO">${current_Date} = 2026-08-15 23:56:51.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.597500" elapsed="0.000180"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.598188" level="INFO">${ellapsed_seconds} = 2578.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.597844" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.598523" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.598288" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.598268" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.596614" elapsed="0.002033"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.599178" level="INFO">${number} = 805</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.598793" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.600621" level="INFO">${number} = 805</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.600266" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.602607" level="INFO">${device-port} = 18634</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.601817" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.605417" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.640851" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.641077" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.605292" elapsed="0.035844"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.642048" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:51.642183" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.641306" elapsed="0.001109">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.641256" elapsed="0.001262">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.605018" elapsed="0.037779">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.604598" elapsed="0.038376"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.643836" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18634 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.712698" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.712955" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.643323" elapsed="0.069688"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.713125" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:51.713529" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.604165" elapsed="0.109475"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.714246" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.603155" elapsed="0.112164"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.601344" elapsed="0.114166"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.600822" elapsed="0.114788"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.599813" elapsed="0.115922"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.599359" elapsed="0.116519"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.717103" level="INFO">${next} = 18635</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.716230" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.717941" level="INFO">${current_port} = 18635</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.717376" elapsed="0.000626"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.595310" elapsed="0.122773"/>
</kw>
<msg time="2026-08-15T23:56:51.718137" level="INFO">Repeating keyword, round 806/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.719697" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.719545" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.719518" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.720290" level="INFO">${current_Date} = 2026-08-15 23:56:51.720</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.720062" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.721026" level="INFO">${ellapsed_seconds} = 2578.617</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.720571" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.721492" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.721164" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.721138" elapsed="0.000464"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.719213" elapsed="0.002453"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.722403" level="INFO">${number} = 806</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.721892" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.724440" level="INFO">${number} = 806</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.723948" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.727234" level="INFO">${device-port} = 18635</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.726119" elapsed="0.001228"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.730563" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.769949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.770194" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.730466" elapsed="0.039790"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.771227" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:51.771366" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.770436" elapsed="0.001047">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.770378" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.730192" elapsed="0.041701">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.729777" elapsed="0.042343"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.773110" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18635 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.840843" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.841078" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.772539" elapsed="0.068598"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.841260" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:51.841718" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.729359" elapsed="0.112526"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.842501" elapsed="0.000983"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.727992" elapsed="0.115724"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.725451" elapsed="0.118533"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.724702" elapsed="0.119393"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.723308" elapsed="0.120921"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.722656" elapsed="0.121711"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.845747" level="INFO">${next} = 18636</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.844844" elapsed="0.001057"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.847409" level="INFO">${current_port} = 18636</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.846337" elapsed="0.001170"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.718399" elapsed="0.129240"/>
</kw>
<msg time="2026-08-15T23:56:51.847741" level="INFO">Repeating keyword, round 807/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.850413" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.850167" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.850121" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.851295" level="INFO">${current_Date} = 2026-08-15 23:56:51.851</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.850940" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.852482" level="INFO">${ellapsed_seconds} = 2578.486</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.851689" elapsed="0.000853"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.853238" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.852703" elapsed="0.000597"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.852660" elapsed="0.000664"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.849563" elapsed="0.003807"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.853911" level="INFO">${number} = 807</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.853517" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.855389" level="INFO">${number} = 807</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.855031" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.857468" level="INFO">${device-port} = 18636</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.856625" elapsed="0.000926"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.862014" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:51.892434" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.892692" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.861909" elapsed="0.030844"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.893778" elapsed="0.000098"/>
</kw>
<msg time="2026-08-15T23:56:51.893980" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:51.893007" elapsed="0.001202">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:51.892949" elapsed="0.001367">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.861567" elapsed="0.033048">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.861167" elapsed="0.033597"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.895697" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18636 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:51.960784" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:51.961062" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.895192" elapsed="0.065937"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:51.961263" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:51.961689" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.860644" elapsed="0.101199"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:51.962463" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.858039" elapsed="0.105548"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.856138" elapsed="0.107644"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.855576" elapsed="0.108360"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.854553" elapsed="0.109512"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.854103" elapsed="0.110060"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.965334" level="INFO">${next} = 18637</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.964575" elapsed="0.000796"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.966285" level="INFO">${current_port} = 18637</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:51.965646" elapsed="0.000699"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.848222" elapsed="0.118206"/>
</kw>
<msg time="2026-08-15T23:56:51.966484" level="INFO">Repeating keyword, round 808/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:51.968105" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:51.967947" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.967920" elapsed="0.000292"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.968703" level="INFO">${current_Date} = 2026-08-15 23:56:51.969</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:51.968469" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:51.969479" level="INFO">${ellapsed_seconds} = 2578.368</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:51.968974" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:51.969986" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:51.969616" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:51.969590" elapsed="0.000536"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:51.967589" elapsed="0.002616"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.970965" level="INFO">${number} = 808</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.970425" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.973051" level="INFO">${number} = 808</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.972535" elapsed="0.000563"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:51.975963" level="INFO">${device-port} = 18637</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:51.974838" elapsed="0.001238"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:51.979212" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.012464" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.012687" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:51.979114" elapsed="0.033631"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.013699" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:52.013867" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.012956" elapsed="0.001020">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.012907" elapsed="0.001176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:51.978766" elapsed="0.035615">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:51.978365" elapsed="0.036226"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.015472" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18637 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.094649" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.094916" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.014980" elapsed="0.079995"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.095093" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:52.095509" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:51.977717" elapsed="0.117902"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.096262" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:51.976728" elapsed="0.120628"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:51.974161" elapsed="0.123387"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:51.973353" elapsed="0.124299"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.971875" elapsed="0.125900"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:51.971222" elapsed="0.126701"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.099088" level="INFO">${next} = 18638</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.098273" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.100507" level="INFO">${current_port} = 18638</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.099533" elapsed="0.001074"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:51.966753" elapsed="0.133983"/>
</kw>
<msg time="2026-08-15T23:56:52.100886" level="INFO">Repeating keyword, round 809/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.102573" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.102419" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.102391" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.103116" level="INFO">${current_Date} = 2026-08-15 23:56:52.103</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.102891" elapsed="0.000262"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.103818" level="INFO">${ellapsed_seconds} = 2578.234</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.103361" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.104307" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.103956" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.103929" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.102061" elapsed="0.002418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.105216" level="INFO">${number} = 809</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.104682" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.107264" level="INFO">${number} = 809</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.106765" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.110116" level="INFO">${device-port} = 18638</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.108964" elapsed="0.001263"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.113943" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.140353" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.140579" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.113762" elapsed="0.026877"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.141557" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:52.141690" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.140842" elapsed="0.001082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.140758" elapsed="0.001268">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.113480" elapsed="0.028828">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.113013" elapsed="0.029437"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.143323" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18638 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.208504" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.208718" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.142829" elapsed="0.065944"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.208926" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:52.209330" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.111999" elapsed="0.097441"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.210043" elapsed="0.000871"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.110865" elapsed="0.100240"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.108304" elapsed="0.102992"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.107523" elapsed="0.103874"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.106118" elapsed="0.105403"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.105470" elapsed="0.106146"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.212855" level="INFO">${next} = 18639</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.212045" elapsed="0.000876"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.214180" level="INFO">${current_port} = 18639</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.213285" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.101258" elapsed="0.113150"/>
</kw>
<msg time="2026-08-15T23:56:52.214494" level="INFO">Repeating keyword, round 810/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.217055" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.216778" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.216736" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.217983" level="INFO">${current_Date} = 2026-08-15 23:56:52.218</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.217600" elapsed="0.000441"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.219080" level="INFO">${ellapsed_seconds} = 2578.119</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.218375" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.219848" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.219297" elapsed="0.000719"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.219256" elapsed="0.000818"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.216248" elapsed="0.003930"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.221281" level="INFO">${number} = 810</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.220508" elapsed="0.000800"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.222712" level="INFO">${number} = 810</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.222373" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.224710" level="INFO">${device-port} = 18639</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.223901" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.227465" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.260359" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.260583" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.227368" elapsed="0.033273"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.261559" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:52.261696" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.260850" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.260761" elapsed="0.001173">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.227091" elapsed="0.035115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.226478" elapsed="0.035940"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.263290" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18639 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.332438" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.332677" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.262772" elapsed="0.069962"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.332895" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:56:52.333320" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.226066" elapsed="0.107361"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.334049" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.225251" elapsed="0.109894"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.223427" elapsed="0.111906"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.222913" elapsed="0.112521"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.221926" elapsed="0.113633"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.221464" elapsed="0.114192"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.336881" level="INFO">${next} = 18640</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.336067" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.338266" level="INFO">${current_port} = 18640</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.337307" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.214970" elapsed="0.123523"/>
</kw>
<msg time="2026-08-15T23:56:52.338580" level="INFO">Repeating keyword, round 811/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.341242" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.340960" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.340916" elapsed="0.000470"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.342113" level="INFO">${current_Date} = 2026-08-15 23:56:52.342</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.341714" elapsed="0.000458"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.343229" level="INFO">${ellapsed_seconds} = 2577.995</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.342505" elapsed="0.000783"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.344047" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.343444" elapsed="0.000729"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.343403" elapsed="0.000824"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.340391" elapsed="0.003938"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.345262" level="INFO">${number} = 811</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.344656" elapsed="0.000632"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.346697" level="INFO">${number} = 811</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.346357" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.348703" level="INFO">${device-port} = 18640</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.347914" elapsed="0.000869"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.351515" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.384653" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.384915" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.351411" elapsed="0.033567"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.385885" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:52.386020" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.385148" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.385098" elapsed="0.001220">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.351133" elapsed="0.035463">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.350489" elapsed="0.036249"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.387606" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18640 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.456987" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.457206" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.387122" elapsed="0.070138"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.457372" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:52.457772" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.350069" elapsed="0.107852"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.458483" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.349255" elapsed="0.110303"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.347427" elapsed="0.112350"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.346904" elapsed="0.113023"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.345906" elapsed="0.114156"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.345443" elapsed="0.114729"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.461318" level="INFO">${next} = 18641</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.460523" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.462797" level="INFO">${current_port} = 18641</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.461742" elapsed="0.001222"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.339076" elapsed="0.124019"/>
</kw>
<msg time="2026-08-15T23:56:52.463181" level="INFO">Repeating keyword, round 812/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.465696" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.465447" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.465403" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.466626" level="INFO">${current_Date} = 2026-08-15 23:56:52.466</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.466280" elapsed="0.000406"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.467729" level="INFO">${ellapsed_seconds} = 2577.871</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.467055" elapsed="0.000832"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.468373" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.468064" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.468014" elapsed="0.000439"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.464909" elapsed="0.003590"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.469037" level="INFO">${number} = 812</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.468646" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.470473" level="INFO">${number} = 812</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.470131" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.472473" level="INFO">${device-port} = 18641</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.471649" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.475280" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.512518" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.512764" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.475176" elapsed="0.037684"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.513780" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:52.513951" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.513043" elapsed="0.001014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.512992" elapsed="0.001156">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.474893" elapsed="0.039534">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.474266" elapsed="0.040429"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.515597" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18641 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.574203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.574411" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.515098" elapsed="0.059368"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.574578" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:52.575032" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.473840" elapsed="0.101301"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.575733" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.473025" elapsed="0.103845"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.471197" elapsed="0.105871"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.470662" elapsed="0.106509"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.469665" elapsed="0.107634"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.469220" elapsed="0.108176"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.578541" level="INFO">${next} = 18642</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.577746" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.579948" level="INFO">${current_port} = 18642</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.579020" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.463603" elapsed="0.116574"/>
</kw>
<msg time="2026-08-15T23:56:52.580263" level="INFO">Repeating keyword, round 813/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.582792" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.582550" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.582507" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.583702" level="INFO">${current_Date} = 2026-08-15 23:56:52.583</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.583305" elapsed="0.000460"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.584494" level="INFO">${ellapsed_seconds} = 2577.754</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.584151" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.584848" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.584590" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.584571" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.582016" elapsed="0.002959"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.585488" level="INFO">${number} = 813</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.585126" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.586943" level="INFO">${number} = 813</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.586587" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.588932" level="INFO">${device-port} = 18642</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.588138" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.591732" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.628412" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.628632" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.591615" elapsed="0.037074"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.629594" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:52.629727" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.628891" elapsed="0.001074">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.628842" elapsed="0.001228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.591331" elapsed="0.039010">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.590715" elapsed="0.039769"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.631351" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18642 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.695965" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.696179" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.630864" elapsed="0.065370"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.696346" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:52.696754" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.590298" elapsed="0.106614"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.697494" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.589458" elapsed="0.109140"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.587664" elapsed="0.111124"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.587130" elapsed="0.111807"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.586136" elapsed="0.112927"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.585671" elapsed="0.113486"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.700329" level="INFO">${next} = 18643</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.699502" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.701664" level="INFO">${current_port} = 18643</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.700763" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.580685" elapsed="0.121270"/>
</kw>
<msg time="2026-08-15T23:56:52.702044" level="INFO">Repeating keyword, round 814/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.704453" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.704298" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.704270" elapsed="0.000274"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.705051" level="INFO">${current_Date} = 2026-08-15 23:56:52.705</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.704821" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.705741" level="INFO">${ellapsed_seconds} = 2577.632</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.705298" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.706238" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.705900" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.705874" elapsed="0.000475"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.703836" elapsed="0.002577"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.707148" level="INFO">${number} = 814</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.706616" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.709233" level="INFO">${number} = 814</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.708723" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.712047" level="INFO">${device-port} = 18643</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.710907" elapsed="0.001254"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.716156" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.748336" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.748585" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.715982" elapsed="0.032668"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.749598" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:52.749738" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.748860" elapsed="0.001022">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.748773" elapsed="0.001206">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.715447" elapsed="0.034833">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.714509" elapsed="0.036020"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.751540" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18643 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.816571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.816833" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.750974" elapsed="0.065921"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.817011" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:52.817429" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.713936" elapsed="0.103604"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.818152" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.712784" elapsed="0.106465"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.710254" elapsed="0.109211"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.709495" elapsed="0.110077"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.708092" elapsed="0.111604"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.707405" elapsed="0.112385"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.821002" level="INFO">${next} = 18644</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.820188" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.822326" level="INFO">${current_port} = 18644</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.821432" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.702480" elapsed="0.120070"/>
</kw>
<msg time="2026-08-15T23:56:52.822635" level="INFO">Repeating keyword, round 815/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.824862" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.824684" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.824656" elapsed="0.000298"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.825386" level="INFO">${current_Date} = 2026-08-15 23:56:52.825</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.825166" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.826084" level="INFO">${ellapsed_seconds} = 2577.512</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.825629" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.826553" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.826220" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.826193" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.824347" elapsed="0.002380"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.827486" level="INFO">${number} = 815</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.826953" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.829509" level="INFO">${number} = 815</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.829035" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.832304" level="INFO">${device-port} = 18644</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.831178" elapsed="0.001239"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.836208" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.868360" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.868584" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.836045" elapsed="0.032599"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.869557" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:52.869690" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.868846" elapsed="0.001065">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.868763" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.835621" elapsed="0.034671">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.834725" elapsed="0.035707"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.871300" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18644 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:52.944378" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.944625" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.870778" elapsed="0.073902"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:52.944837" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:52.945276" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.834145" elapsed="0.111242"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:52.946012" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.833042" elapsed="0.114088"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.830523" elapsed="0.116798"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.829776" elapsed="0.117702"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.828388" elapsed="0.119217"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.827740" elapsed="0.119960"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.948890" level="INFO">${next} = 18645</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.948087" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.950219" level="INFO">${current_port} = 18645</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:52.949318" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.823121" elapsed="0.127326"/>
</kw>
<msg time="2026-08-15T23:56:52.950535" level="INFO">Repeating keyword, round 816/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:52.952847" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:52.952671" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.952643" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.953428" level="INFO">${current_Date} = 2026-08-15 23:56:52.953</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:52.953200" elapsed="0.000265"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:52.954143" level="INFO">${ellapsed_seconds} = 2577.384</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:52.953674" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.954615" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:52.954280" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:52.954253" elapsed="0.000472"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:52.952331" elapsed="0.002458"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.955576" level="INFO">${number} = 816</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.955018" elapsed="0.000594"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.957658" level="INFO">${number} = 816</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.957177" elapsed="0.000518"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:52.960465" level="INFO">${device-port} = 18645</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:52.959346" elapsed="0.001231"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.964462" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:52.996303" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:52.996527" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.964362" elapsed="0.032224"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:52.997508" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:52.997643" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:52.996754" elapsed="0.000994">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:52.996708" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:52.963983" elapsed="0.034176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:52.962952" elapsed="0.035425"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:52.999246" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18645 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.068318" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.068527" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:52.998728" elapsed="0.069854"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.068692" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:56:53.069219" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:52.962349" elapsed="0.106983"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.069934" elapsed="0.000836"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:52.961221" elapsed="0.109992"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:52.958671" elapsed="0.112766"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:52.957939" elapsed="0.113620"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.956522" elapsed="0.115160"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:52.955885" elapsed="0.115894"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.072974" level="INFO">${next} = 18646</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.072169" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.074304" level="INFO">${current_port} = 18646</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.073394" elapsed="0.001006"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:52.951038" elapsed="0.123492"/>
</kw>
<msg time="2026-08-15T23:56:53.074617" level="INFO">Repeating keyword, round 817/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.077206" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.076962" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.076920" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.078041" level="INFO">${current_Date} = 2026-08-15 23:56:53.078</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.077670" elapsed="0.000431"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.079132" level="INFO">${ellapsed_seconds} = 2577.259</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.078428" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.079953" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.079399" elapsed="0.000676"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.079355" elapsed="0.000747"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.076403" elapsed="0.003744"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.080663" level="INFO">${number} = 817</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.080297" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.082119" level="INFO">${number} = 817</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.081757" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.084109" level="INFO">${device-port} = 18646</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.083314" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.086843" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.120193" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.120438" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.086722" elapsed="0.033775"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.121463" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:53.121598" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.120677" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.120625" elapsed="0.001313">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.086440" elapsed="0.035784">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.085858" elapsed="0.036510"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.123306" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18646 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.188885" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.189104" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.122725" elapsed="0.066435"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.189274" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:53.189697" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.085424" elapsed="0.104422"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.190419" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.084624" elapsed="0.106949"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.082846" elapsed="0.108918"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.082304" elapsed="0.109611"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.081311" elapsed="0.110734"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.080862" elapsed="0.111281"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.193350" level="INFO">${next} = 18647</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.192491" elapsed="0.000920"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.194678" level="INFO">${current_port} = 18647</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.193775" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.075093" elapsed="0.119877"/>
</kw>
<msg time="2026-08-15T23:56:53.195059" level="INFO">Repeating keyword, round 818/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.197640" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.197396" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.197352" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.198756" level="INFO">${current_Date} = 2026-08-15 23:56:53.199</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.198389" elapsed="0.000464"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.199482" level="INFO">${ellapsed_seconds} = 2577.138</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.199148" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.199842" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.199580" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.199561" elapsed="0.000362"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.196850" elapsed="0.003120"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.200537" level="INFO">${number} = 818</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.200117" elapsed="0.000447"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.202051" level="INFO">${number} = 818</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.201680" elapsed="0.000402"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.204214" level="INFO">${device-port} = 18647</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.203284" elapsed="0.001016"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.207053" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.240463" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.240690" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.206951" elapsed="0.033798"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.241673" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:53.241836" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.240962" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.240913" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.206651" elapsed="0.035661">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.206047" elapsed="0.036474"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.243449" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18647 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.331236" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.331474" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.242905" elapsed="0.088625"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.331646" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:53.332114" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.205612" elapsed="0.126627"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.332861" elapsed="0.000867"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.204777" elapsed="0.129177"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.202791" elapsed="0.131356"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.202251" elapsed="0.131999"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.201228" elapsed="0.133148"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.200722" elapsed="0.133749"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.335709" level="INFO">${next} = 18648</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.334852" elapsed="0.000918"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.337125" level="INFO">${current_port} = 18648</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.336190" elapsed="0.001033"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.195530" elapsed="0.141823"/>
</kw>
<msg time="2026-08-15T23:56:53.337440" level="INFO">Repeating keyword, round 819/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.340103" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.339845" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.339770" elapsed="0.000462"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.340553" level="INFO">${current_Date} = 2026-08-15 23:56:53.340</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.340390" elapsed="0.000189"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.341073" level="INFO">${ellapsed_seconds} = 2576.997</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.340727" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.341495" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.341174" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.341155" elapsed="0.000421"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.339274" elapsed="0.002349"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.342152" level="INFO">${number} = 819</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.341769" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.343629" level="INFO">${number} = 819</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.343280" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.345609" level="INFO">${device-port} = 18648</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.344830" elapsed="0.000859"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.350107" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.384031" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.384217" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.349994" elapsed="0.034290"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.385204" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:53.385337" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.384455" elapsed="0.001090">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.384409" elapsed="0.001234">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.349609" elapsed="0.036348">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.347387" elapsed="0.038718"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.387001" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18648 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.452643" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.452910" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.386447" elapsed="0.066521"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.453076" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:53.453479" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.346948" elapsed="0.106642"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.454186" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.346147" elapsed="0.109127"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.344364" elapsed="0.111097"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.343831" elapsed="0.111728"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.342785" elapsed="0.112896"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.342335" elapsed="0.113439"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.456952" level="INFO">${next} = 18649</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.456162" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.458257" level="INFO">${current_port} = 18649</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.457370" elapsed="0.000983"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.337929" elapsed="0.120551"/>
</kw>
<msg time="2026-08-15T23:56:53.458563" level="INFO">Repeating keyword, round 820/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.460761" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.460611" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.460584" elapsed="0.000288"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.461344" level="INFO">${current_Date} = 2026-08-15 23:56:53.461</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.461124" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.462046" level="INFO">${ellapsed_seconds} = 2576.876</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.461588" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.462511" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.462180" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.462155" elapsed="0.000466"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.460284" elapsed="0.002400"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.463428" level="INFO">${number} = 820</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.462920" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.465434" level="INFO">${number} = 820</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.464967" elapsed="0.000504"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.468236" level="INFO">${device-port} = 18649</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.467116" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.471933" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.504372" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.504590" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.471762" elapsed="0.032887"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.505554" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:53.505688" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.504850" elapsed="0.000944">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.504767" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.471485" elapsed="0.034705">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.470691" elapsed="0.035755"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.507360" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18649 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.562178" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.562424" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.506827" elapsed="0.055659"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.562607" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:56:53.563106" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.470116" elapsed="0.093105"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.563875" elapsed="0.000954"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.468995" elapsed="0.096044"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.466442" elapsed="0.098795"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.465691" elapsed="0.099653"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.464331" elapsed="0.101150"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.463680" elapsed="0.101917"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.566791" level="INFO">${next} = 18650</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.566000" elapsed="0.000926"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.568409" level="INFO">${current_port} = 18650</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.567455" elapsed="0.001053"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.459083" elapsed="0.109584"/>
</kw>
<msg time="2026-08-15T23:56:53.568762" level="INFO">Repeating keyword, round 821/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.571383" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.571257" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.571231" elapsed="0.000220"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.571778" level="INFO">${current_Date} = 2026-08-15 23:56:53.572</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.571601" elapsed="0.000221"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.572306" level="INFO">${ellapsed_seconds} = 2576.765</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.571977" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.572657" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.572407" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.572387" elapsed="0.000363"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.570599" elapsed="0.002214"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.573338" level="INFO">${number} = 821</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.572967" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.574873" level="INFO">${number} = 821</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.574469" elapsed="0.000434"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.576942" level="INFO">${device-port} = 18650</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.576101" elapsed="0.000924"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.579855" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.615927" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.616156" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.579718" elapsed="0.036499"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.617187" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:53.617330" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.616382" elapsed="0.001143">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.616336" elapsed="0.001288">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.579431" elapsed="0.038506">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.578753" elapsed="0.039332"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.619006" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18650 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.684456" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.684672" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.618432" elapsed="0.066296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.684880" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:53.685286" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.578331" elapsed="0.107065"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.686018" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.577482" elapsed="0.109651"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.575605" elapsed="0.111717"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.575068" elapsed="0.112354"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.574010" elapsed="0.113536"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.573524" elapsed="0.114117"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.688782" level="INFO">${next} = 18651</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.688030" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.690193" level="INFO">${current_port} = 18651</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.689257" elapsed="0.001042"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.569265" elapsed="0.121185"/>
</kw>
<msg time="2026-08-15T23:56:53.690544" level="INFO">Repeating keyword, round 822/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.693268" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.693021" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.692977" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.694195" level="INFO">${current_Date} = 2026-08-15 23:56:53.694</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.693843" elapsed="0.000411"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.695311" level="INFO">${ellapsed_seconds} = 2576.643</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.694588" elapsed="0.000752"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.695648" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.695411" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.695392" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.692451" elapsed="0.003321"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.696491" level="INFO">${number} = 822</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.696093" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.697951" level="INFO">${number} = 822</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.697589" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.699992" level="INFO">${device-port} = 18651</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.699163" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.702748" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.732623" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.732883" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.702617" elapsed="0.030327"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.733841" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:53.733981" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.733110" elapsed="0.000977">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.733064" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.702159" elapsed="0.032337">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.701745" elapsed="0.033017"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.735708" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18651 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.804263" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.804481" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.735170" elapsed="0.069367"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.804647" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:53.805094" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.701332" elapsed="0.103874"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.805767" elapsed="0.000925"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.700520" elapsed="0.106407"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.698656" elapsed="0.108470"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.698138" elapsed="0.109105"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.697142" elapsed="0.110238"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.696674" elapsed="0.110803"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.808614" level="INFO">${next} = 18652</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.807867" elapsed="0.000806"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.809974" level="INFO">${current_port} = 18652</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.809087" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.691122" elapsed="0.119079"/>
</kw>
<msg time="2026-08-15T23:56:53.810288" level="INFO">Repeating keyword, round 823/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.812940" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.812659" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.812617" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.813756" level="INFO">${current_Date} = 2026-08-15 23:56:53.814</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.813417" elapsed="0.000430"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.814955" level="INFO">${ellapsed_seconds} = 2576.523</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.814186" elapsed="0.000830"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.815393" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.815159" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.815132" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.812124" elapsed="0.003394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.816049" level="INFO">${number} = 823</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.815663" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.817484" level="INFO">${number} = 823</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.817143" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.819509" level="INFO">${device-port} = 18652</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.818692" elapsed="0.000899"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.822283" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.856280" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.856502" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.822007" elapsed="0.034553"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.857471" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:53.857604" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.856725" elapsed="0.001102">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.856679" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.821698" elapsed="0.036510">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.821306" elapsed="0.037043"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.859244" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18652 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:53.924336" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.924575" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.858726" elapsed="0.065905"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:53.924741" elapsed="0.000109"/>
</return>
<msg time="2026-08-15T23:56:53.925186" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.820857" elapsed="0.104437"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:53.925887" elapsed="0.000872"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.820049" elapsed="0.106940"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.818210" elapsed="0.108966"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.817668" elapsed="0.109607"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.816678" elapsed="0.110719"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.816230" elapsed="0.111261"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.928629" level="INFO">${next} = 18653</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.927877" elapsed="0.000813"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.930007" level="INFO">${current_port} = 18653</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:53.929103" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.810738" elapsed="0.119498"/>
</kw>
<msg time="2026-08-15T23:56:53.930321" level="INFO">Repeating keyword, round 824/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:53.932879" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:53.932603" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.932561" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.933774" level="INFO">${current_Date} = 2026-08-15 23:56:53.934</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:53.933430" elapsed="0.000436"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:53.934972" level="INFO">${ellapsed_seconds} = 2576.403</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:53.934203" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.935480" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:53.935209" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:53.935161" elapsed="0.000397"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:53.932075" elapsed="0.003530"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.936133" level="INFO">${number} = 824</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.935750" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.937565" level="INFO">${number} = 824</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.937226" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:53.939539" level="INFO">${device-port} = 18653</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:53.938746" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.942084" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:53.976105" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:53.976340" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.941980" elapsed="0.034420"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:53.977348" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:53.977491" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:53.976570" elapsed="0.001031">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:53.976522" elapsed="0.001175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:53.941668" elapsed="0.036345">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:53.941282" elapsed="0.036974"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:53.979203" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18653 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.044491" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.044702" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:53.978658" elapsed="0.066098"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.044905" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:56:54.045348" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:53.940869" elapsed="0.104592"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.046088" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:53.940075" elapsed="0.107188"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:53.938283" elapsed="0.109178"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:53.937750" elapsed="0.109818"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.936763" elapsed="0.110934"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:53.936316" elapsed="0.111522"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.049060" level="INFO">${next} = 18654</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.048228" elapsed="0.000910"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.050491" level="INFO">${current_port} = 18654</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.049511" elapsed="0.001088"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:53.930764" elapsed="0.119971"/>
</kw>
<msg time="2026-08-15T23:56:54.050892" level="INFO">Repeating keyword, round 825/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.053500" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.053244" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.053193" elapsed="0.000455"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.054452" level="INFO">${current_Date} = 2026-08-15 23:56:54.054</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.054023" elapsed="0.000501"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.055482" level="INFO">${ellapsed_seconds} = 2576.283</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.054900" elapsed="0.000620"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.055980" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.055622" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.055595" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.052645" elapsed="0.003520"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.056927" level="INFO">${number} = 825</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.056382" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.059038" level="INFO">${number} = 825</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.058526" elapsed="0.000551"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.061929" level="INFO">${device-port} = 18654</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.060735" elapsed="0.001311"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.066039" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.096169" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.096401" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.065566" elapsed="0.030896"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.097417" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:54.097555" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.096633" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.096585" elapsed="0.001318">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.065152" elapsed="0.033046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.064516" elapsed="0.033830"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.099327" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18654 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.164682" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.164953" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.098746" elapsed="0.066266"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.165124" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:54.165532" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.063912" elapsed="0.101734"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.166273" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.062717" elapsed="0.104718"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.060080" elapsed="0.107550"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.059302" elapsed="0.108433"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.057863" elapsed="0.110068"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.057187" elapsed="0.110853"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.169233" level="INFO">${next} = 18655</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.168393" elapsed="0.000903"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.170631" level="INFO">${current_port} = 18655</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.169663" elapsed="0.001070"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.051346" elapsed="0.119598"/>
</kw>
<msg time="2026-08-15T23:56:54.171050" level="INFO">Repeating keyword, round 826/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.173651" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.173398" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.173354" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.174702" level="INFO">${current_Date} = 2026-08-15 23:56:54.175</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.174273" elapsed="0.000490"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.175558" level="INFO">${ellapsed_seconds} = 2576.162</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.175168" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.175920" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.175659" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.175640" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.172833" elapsed="0.003221"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.176584" level="INFO">${number} = 826</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.176209" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.178074" level="INFO">${number} = 826</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.177709" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.180125" level="INFO">${device-port} = 18655</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.179302" elapsed="0.000919"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.182933" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.216467" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.216705" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.182820" elapsed="0.033948"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.217707" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:54.217878" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.216981" elapsed="0.001006">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.216932" elapsed="0.001149">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.182368" elapsed="0.036017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.181931" elapsed="0.036678"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.219510" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18655 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.284590" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.284887" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.219009" elapsed="0.065940"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.285078" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:56:54.285522" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.181493" elapsed="0.104141"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.286300" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.180669" elapsed="0.106772"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.178837" elapsed="0.108792"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.178271" elapsed="0.109460"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.177249" elapsed="0.110656"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.176767" elapsed="0.111243"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.289180" level="INFO">${next} = 18656</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.288362" elapsed="0.000879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.290594" level="INFO">${current_port} = 18656</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.289606" elapsed="0.001089"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.171487" elapsed="0.119401"/>
</kw>
<msg time="2026-08-15T23:56:54.290982" level="INFO">Repeating keyword, round 827/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.292718" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.292561" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.292533" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.293274" level="INFO">${current_Date} = 2026-08-15 23:56:54.293</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.293047" elapsed="0.000264"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.293980" level="INFO">${ellapsed_seconds} = 2576.044</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.293519" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.294514" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.294114" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.294087" elapsed="0.000539"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.292223" elapsed="0.002467"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.295433" level="INFO">${number} = 827</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.294913" elapsed="0.000556"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.297446" level="INFO">${number} = 827</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.296971" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.300250" level="INFO">${device-port} = 18656</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.299151" elapsed="0.001212"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.303920" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.336609" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.336867" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.303744" elapsed="0.033184"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.337838" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:54.337977" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.337097" elapsed="0.001115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.337050" elapsed="0.001279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.303309" elapsed="0.035304">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.302729" elapsed="0.036028"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.339619" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18656 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.404684" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.404928" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.339137" elapsed="0.065849"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.405096" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:54.405508" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.302099" elapsed="0.103518"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.406239" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.300997" elapsed="0.106315"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.298496" elapsed="0.109003"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.297710" elapsed="0.109888"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.296329" elapsed="0.111391"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.295684" elapsed="0.112171"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.408992" level="INFO">${next} = 18657</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.408203" elapsed="0.000850"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.410314" level="INFO">${current_port} = 18657</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.409413" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.291379" elapsed="0.119163"/>
</kw>
<msg time="2026-08-15T23:56:54.410626" level="INFO">Repeating keyword, round 828/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.413192" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.412945" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.412900" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.414179" level="INFO">${current_Date} = 2026-08-15 23:56:54.414</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.413752" elapsed="0.000489"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.415299" level="INFO">${ellapsed_seconds} = 2575.923</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.414579" elapsed="0.000753"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.415649" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.415414" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.415395" elapsed="0.000332"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.412378" elapsed="0.003394"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.416303" level="INFO">${number} = 828</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.415937" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.417731" level="INFO">${number} = 828</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.417393" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.419738" level="INFO">${device-port} = 18657</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.418954" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.422496" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.452350" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.452573" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.422398" elapsed="0.030234"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.453541" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:54.453675" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.452798" elapsed="0.000982">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.452752" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.422109" elapsed="0.032092">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.421517" elapsed="0.032895"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.455274" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18657 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.520770" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.521018" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.454762" elapsed="0.066310"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.521182" elapsed="0.000069"/>
</return>
<msg time="2026-08-15T23:56:54.521577" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.421091" elapsed="0.100596"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.522319" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.420277" elapsed="0.103111"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.418484" elapsed="0.105095"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.417932" elapsed="0.105746"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.416947" elapsed="0.106893"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.416483" elapsed="0.107463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.525075" level="INFO">${next} = 18658</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.524292" elapsed="0.000842"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.526407" level="INFO">${current_port} = 18658</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.525494" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.411111" elapsed="0.115521"/>
</kw>
<msg time="2026-08-15T23:56:54.526719" level="INFO">Repeating keyword, round 829/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.529501" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.529216" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.529161" elapsed="0.000484"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.530433" level="INFO">${current_Date} = 2026-08-15 23:56:54.530</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.530070" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.531440" level="INFO">${ellapsed_seconds} = 2575.807</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.530860" elapsed="0.000616"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.531922" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.531575" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.531548" elapsed="0.000485"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.528468" elapsed="0.003628"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.532837" level="INFO">${number} = 829</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.532300" elapsed="0.000576"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.534873" level="INFO">${number} = 829</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.534385" elapsed="0.000526"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.537615" level="INFO">${device-port} = 18658</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.536512" elapsed="0.001213"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.541619" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.568231" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.568468" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.541475" elapsed="0.027053"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.569482" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:54.569627" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.568695" elapsed="0.001168">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.568649" elapsed="0.001369">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.541082" elapsed="0.029247">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.540100" elapsed="0.030390"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.571399" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18658 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.636906" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.637129" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.570897" elapsed="0.066288"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.637300" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:54.637723" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.539498" elapsed="0.098387"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.638513" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.538372" elapsed="0.101250"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.535887" elapsed="0.103965"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.535138" elapsed="0.104842"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.533720" elapsed="0.106388"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.533100" elapsed="0.107101"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.641386" level="INFO">${next} = 18659</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.640551" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.642603" level="INFO">${current_port} = 18659</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.641857" elapsed="0.000808"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.527209" elapsed="0.115540"/>
</kw>
<msg time="2026-08-15T23:56:54.642854" level="INFO">Repeating keyword, round 830/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.644418" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.644264" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.644238" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.645021" level="INFO">${current_Date} = 2026-08-15 23:56:54.645</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.644778" elapsed="0.000280"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.645733" level="INFO">${ellapsed_seconds} = 2575.692</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.645268" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.646252" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.645918" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.645869" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.643932" elapsed="0.002495"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.647180" level="INFO">${number} = 830</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.646634" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.649235" level="INFO">${number} = 830</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.648718" elapsed="0.000556"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.652125" level="INFO">${device-port} = 18659</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.650983" elapsed="0.001260"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.655667" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.687864" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.688097" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.655563" elapsed="0.032594"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.689065" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:54.689199" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.688326" elapsed="0.000978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.688280" elapsed="0.001115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.655286" elapsed="0.034378">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.654648" elapsed="0.035284"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.690781" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18659 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.757255" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.757507" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.690292" elapsed="0.067269"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.757673" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:54.758124" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.654177" elapsed="0.104043"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.758776" elapsed="0.000786"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.652929" elapsed="0.106795"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.650293" elapsed="0.109615"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.649498" elapsed="0.110484"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.648090" elapsed="0.111994"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.647436" elapsed="0.112740"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.761032" level="INFO">${next} = 18660</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.760459" elapsed="0.000611"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.761950" level="INFO">${current_port} = 18660</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.761307" elapsed="0.000708"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.643137" elapsed="0.118963"/>
</kw>
<msg time="2026-08-15T23:56:54.762156" level="INFO">Repeating keyword, round 831/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.764064" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.763854" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.763792" elapsed="0.000397"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.764785" level="INFO">${current_Date} = 2026-08-15 23:56:54.765</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.764481" elapsed="0.000376"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.765732" level="INFO">${ellapsed_seconds} = 2575.572</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.765143" elapsed="0.000628"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.766331" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.765945" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.765915" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.763477" elapsed="0.002989"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.767159" level="INFO">${number} = 831</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.766648" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.768928" level="INFO">${number} = 831</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.768522" elapsed="0.000434"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.771011" level="INFO">${device-port} = 18660</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.770197" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.776370" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.808763" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.809091" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.776246" elapsed="0.032910"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.810347" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:56:54.810500" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.809385" elapsed="0.001387">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.809323" elapsed="0.001606">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.775938" elapsed="0.035314">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.772828" elapsed="0.038580"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.812368" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18660 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.876929" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.877149" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.811823" elapsed="0.065380"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.877320" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:54.877840" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.772373" elapsed="0.105606"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.878570" elapsed="0.001077"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.771545" elapsed="0.108359"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.769695" elapsed="0.110426"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.769125" elapsed="0.111118"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.767989" elapsed="0.112414"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.767416" elapsed="0.113090"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.881695" level="INFO">${next} = 18661</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.880909" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.883183" level="INFO">${current_port} = 18661</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.882221" elapsed="0.001062"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.762529" elapsed="0.120887"/>
</kw>
<msg time="2026-08-15T23:56:54.883502" level="INFO">Repeating keyword, round 832/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.886289" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.886018" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.885971" elapsed="0.000401"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.886747" level="INFO">${current_Date} = 2026-08-15 23:56:54.887</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.886568" elapsed="0.000206"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.887285" level="INFO">${ellapsed_seconds} = 2575.45</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.886943" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.887641" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.887381" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.887363" elapsed="0.000358"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.885391" elapsed="0.002375"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.888296" level="INFO">${number} = 832</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.887928" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.889757" level="INFO">${number} = 832</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.889392" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.891759" level="INFO">${device-port} = 18661</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.890975" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.894546" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:54.932374" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.932600" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.894448" elapsed="0.038211"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.933575" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:54.933732" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:54.932861" elapsed="0.001008">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:54.932778" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:54.893992" elapsed="0.040250">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:54.893551" elapsed="0.040900"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:54.935351" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18661 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:54.990341" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:54.990554" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:54.934835" elapsed="0.055774"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:54.990720" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:54.991165" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:54.893133" elapsed="0.098141"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:54.991870" elapsed="0.000842"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:54.892317" elapsed="0.100619"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:54.890496" elapsed="0.102634"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:54.889963" elapsed="0.103266"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.888941" elapsed="0.104412"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.888477" elapsed="0.104971"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.994509" level="INFO">${next} = 18662</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.993888" elapsed="0.000658"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.995332" level="INFO">${current_port} = 18662</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:54.994770" elapsed="0.000622"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.884008" elapsed="0.111462"/>
</kw>
<msg time="2026-08-15T23:56:54.995523" level="INFO">Repeating keyword, round 833/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:54.997095" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:54.996942" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.996915" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.997603" level="INFO">${current_Date} = 2026-08-15 23:56:54.997</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:54.997389" elapsed="0.000267"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:54.998317" level="INFO">${ellapsed_seconds} = 2575.34</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:54.997888" elapsed="0.000466"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:54.998780" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:54.998452" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:54.998426" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:54.996573" elapsed="0.002403"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:54.999689" level="INFO">${number} = 833</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:54.999180" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.001714" level="INFO">${number} = 833</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.001225" elapsed="0.000527"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.004457" level="INFO">${device-port} = 18662</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.003365" elapsed="0.001203"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.007771" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.044447" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.044685" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.007500" elapsed="0.037245"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.045725" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:55.045894" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.044954" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.044905" elapsed="0.001307">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.007223" elapsed="0.039269">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.006836" elapsed="0.039802"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.047540" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18662 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.102921" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.103137" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.047022" elapsed="0.056170"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.103305" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:55.103716" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.006404" elapsed="0.097474"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.104450" elapsed="0.000940"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.005200" elapsed="0.100423"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.002714" elapsed="0.103148"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.001993" elapsed="0.103976"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.000580" elapsed="0.105514"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:54.999960" elapsed="0.106228"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.107341" level="INFO">${next} = 18663</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.106536" elapsed="0.000865"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.108673" level="INFO">${current_port} = 18663</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.107762" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:54.995784" elapsed="0.113194"/>
</kw>
<msg time="2026-08-15T23:56:55.109063" level="INFO">Repeating keyword, round 834/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.111794" elapsed="0.000080"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.111519" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.111476" elapsed="0.000516"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.112916" level="INFO">${current_Date} = 2026-08-15 23:56:55.113</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.112482" elapsed="0.000499"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.114131" level="INFO">${ellapsed_seconds} = 2575.224</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.113324" elapsed="0.000906"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.114635" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.114374" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.114348" elapsed="0.000367"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.110934" elapsed="0.003828"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.115341" level="INFO">${number} = 834</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.114928" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.116864" level="INFO">${number} = 834</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.116468" elapsed="0.000425"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.118978" level="INFO">${device-port} = 18663</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.118138" elapsed="0.000922"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.121742" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.156394" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.156627" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.121639" elapsed="0.035048"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.157682" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:55.157855" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.156914" elapsed="0.001067">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.156852" elapsed="0.001228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.121308" elapsed="0.037048">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.120907" elapsed="0.037662"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.159475" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18663 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.224551" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.224774" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.158975" elapsed="0.065909"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.225001" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:55.225410" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.120430" elapsed="0.105309"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.226379" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.119528" elapsed="0.107956"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.117647" elapsed="0.110030"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.117056" elapsed="0.110722"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.116002" elapsed="0.111974"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.115528" elapsed="0.112549"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.229260" level="INFO">${next} = 18664</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.228432" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.230692" level="INFO">${current_port} = 18664</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.229741" elapsed="0.001050"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.109489" elapsed="0.121519"/>
</kw>
<msg time="2026-08-15T23:56:55.231102" level="INFO">Repeating keyword, round 835/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.233764" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.233506" elapsed="0.000391"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.233410" elapsed="0.000537"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.234496" level="INFO">${current_Date} = 2026-08-15 23:56:55.234</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.234314" elapsed="0.000210"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.235003" level="INFO">${ellapsed_seconds} = 2575.103</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.234675" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.235356" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.235110" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.235088" elapsed="0.000351"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.232873" elapsed="0.002612"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.236020" level="INFO">${number} = 835</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.235632" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.237525" level="INFO">${number} = 835</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.237154" elapsed="0.000399"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.239566" level="INFO">${device-port} = 18664</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.238733" elapsed="0.000914"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.242230" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.272657" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.272967" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.242121" elapsed="0.030917"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.274117" elapsed="0.000064"/>
</kw>
<msg time="2026-08-15T23:56:55.274300" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.273240" elapsed="0.001269">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.273164" elapsed="0.001451">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.241831" elapsed="0.033137">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.241383" elapsed="0.033756"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.276140" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18664 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.330706" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.330986" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.275536" elapsed="0.055509"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.331159" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:55.331565" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.240944" elapsed="0.090731"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.332310" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.240109" elapsed="0.093402"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.238271" elapsed="0.095438"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.237715" elapsed="0.096149"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.236665" elapsed="0.097368"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.236212" elapsed="0.097925"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.335379" level="INFO">${next} = 18665</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.334494" elapsed="0.000950"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.336748" level="INFO">${current_port} = 18665</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.335867" elapsed="0.001067"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.231530" elapsed="0.105547"/>
</kw>
<msg time="2026-08-15T23:56:55.337168" level="INFO">Repeating keyword, round 836/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.339985" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.339671" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.339628" elapsed="0.000507"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.340970" level="INFO">${current_Date} = 2026-08-15 23:56:55.341</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.340545" elapsed="0.000493"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.342183" level="INFO">${ellapsed_seconds} = 2574.996</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.341437" elapsed="0.000818"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.342630" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.342380" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.342356" elapsed="0.000357"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.339112" elapsed="0.003648"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.343305" level="INFO">${number} = 836</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.342927" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.344820" level="INFO">${number} = 836</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.344440" elapsed="0.000414"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.346892" level="INFO">${device-port} = 18665</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.346069" elapsed="0.000908"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.349538" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.384538" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.384765" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.349430" elapsed="0.035442"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.385888" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:56:55.386038" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.385052" elapsed="0.001094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.385004" elapsed="0.001239">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.349127" elapsed="0.037393">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.348687" elapsed="0.038047"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.387630" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18665 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.452763" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.453025" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.387134" elapsed="0.065947"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.453194" elapsed="0.000097"/>
</return>
<msg time="2026-08-15T23:56:55.453630" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.348266" elapsed="0.105476"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.454387" elapsed="0.000964"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.347433" elapsed="0.108113"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.345573" elapsed="0.110162"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.345020" elapsed="0.110877"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.343964" elapsed="0.112079"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.343490" elapsed="0.112657"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.457365" level="INFO">${next} = 18666</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.456499" elapsed="0.000929"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.458733" level="INFO">${current_port} = 18666</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.457840" elapsed="0.001079"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.337629" elapsed="0.121431"/>
</kw>
<msg time="2026-08-15T23:56:55.459152" level="INFO">Repeating keyword, round 837/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.461768" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.461520" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.461473" elapsed="0.000474"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.462515" level="INFO">${current_Date} = 2026-08-15 23:56:55.462</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.462286" elapsed="0.000266"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.463229" level="INFO">${ellapsed_seconds} = 2574.875</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.462761" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.463694" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.463366" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.463339" elapsed="0.000488"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.460902" elapsed="0.002992"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.464606" level="INFO">${number} = 837</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.464098" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.466667" level="INFO">${number} = 837</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.466192" elapsed="0.000512"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.469578" level="INFO">${device-port} = 18666</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.468373" elapsed="0.001321"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.473713" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.500481" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.500705" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.473351" elapsed="0.027413"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.501770" elapsed="0.000089"/>
</kw>
<msg time="2026-08-15T23:56:55.501940" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.500988" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.500937" elapsed="0.001304">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.472739" elapsed="0.029775">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.472176" elapsed="0.030478"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.503534" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18666 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.558534" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.558754" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.503044" elapsed="0.055818"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.558985" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:55.559435" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.471546" elapsed="0.088002"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.560193" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.470370" elapsed="0.090983"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.467680" elapsed="0.093869"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.466954" elapsed="0.094700"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.465535" elapsed="0.096248"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.464887" elapsed="0.097065"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.563165" level="INFO">${next} = 18667</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.562310" elapsed="0.000920"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.564550" level="INFO">${current_port} = 18667</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.563601" elapsed="0.001050"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.459585" elapsed="0.105199"/>
</kw>
<msg time="2026-08-15T23:56:55.564965" level="INFO">Repeating keyword, round 838/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.567093" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.566939" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.566911" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.567650" level="INFO">${current_Date} = 2026-08-15 23:56:55.568</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.567434" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.568512" level="INFO">${ellapsed_seconds} = 2574.769</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.568045" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.568998" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.568649" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.568623" elapsed="0.000489"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.566577" elapsed="0.002613"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.569933" level="INFO">${number} = 838</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.569396" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.571975" level="INFO">${number} = 838</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.571481" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.574881" level="INFO">${device-port} = 18667</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.573700" elapsed="0.001301"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.578760" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.612246" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.612474" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.578652" elapsed="0.033882"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.613551" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:55.613694" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.612701" elapsed="0.001143">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.612655" elapsed="0.001311">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.578119" elapsed="0.036128">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.577454" elapsed="0.037145"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.615533" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18667 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.669957" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.670173" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.615023" elapsed="0.055206"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.670342" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:55.670741" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.576776" elapsed="0.094140"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.671508" elapsed="0.000962"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.575627" elapsed="0.097044"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.573031" elapsed="0.099903"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.572244" elapsed="0.100806"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.570852" elapsed="0.102362"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.570188" elapsed="0.103131"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.674504" level="INFO">${next} = 18668</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.673673" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.676008" level="INFO">${current_port} = 18668</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.675019" elapsed="0.001098"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.565461" elapsed="0.110792"/>
</kw>
<msg time="2026-08-15T23:56:55.676346" level="INFO">Repeating keyword, round 839/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.679125" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.678854" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.678773" elapsed="0.000505"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.679992" level="INFO">${current_Date} = 2026-08-15 23:56:55.680</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.679606" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.681176" level="INFO">${ellapsed_seconds} = 2574.657</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.680391" elapsed="0.000855"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.681979" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.681413" elapsed="0.000695"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.681369" elapsed="0.000809"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.678208" elapsed="0.004106"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.682898" level="INFO">${number} = 839</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.682500" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.684357" level="INFO">${number} = 839</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.684013" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.686452" level="INFO">${device-port} = 18668</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.685595" elapsed="0.000941"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.689249" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.727733" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.728007" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.689140" elapsed="0.038929"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.729003" elapsed="0.000094"/>
</kw>
<msg time="2026-08-15T23:56:55.729190" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.728244" elapsed="0.001157">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.728196" elapsed="0.001311">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.688663" elapsed="0.041126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.688262" elapsed="0.041711"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.730861" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18668 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.786166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.786393" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.730325" elapsed="0.056125"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.786567" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:55.787014" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.687836" elapsed="0.099290"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.787695" elapsed="0.000895"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.687020" elapsed="0.101761"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.685133" elapsed="0.103924"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.684546" elapsed="0.104619"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.683537" elapsed="0.105752"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.683084" elapsed="0.106298"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.790522" level="INFO">${next} = 18669</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.789726" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.791901" level="INFO">${current_port} = 18669</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.791011" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.676777" elapsed="0.115353"/>
</kw>
<msg time="2026-08-15T23:56:55.792216" level="INFO">Repeating keyword, round 840/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.794793" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.794537" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.794483" elapsed="0.000487"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.795735" level="INFO">${current_Date} = 2026-08-15 23:56:55.796</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.795383" elapsed="0.000411"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.796888" level="INFO">${ellapsed_seconds} = 2574.541</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.796165" elapsed="0.000785"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.797542" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.797199" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.797148" elapsed="0.000473"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.793991" elapsed="0.003676"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.798207" level="INFO">${number} = 840</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.797829" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.799641" level="INFO">${number} = 840</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.799297" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.801630" level="INFO">${device-port} = 18669</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.800831" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.804349" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.862336" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.862559" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.804245" elapsed="0.058372"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.863534" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:55.863668" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.862783" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.862737" elapsed="0.001167">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.803967" elapsed="0.060210">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.803383" elapsed="0.061011"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.865292" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18669 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:55.928057" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.928271" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.864741" elapsed="0.063585"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:55.928437" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:56:55.928910" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.802963" elapsed="0.126067"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:55.929579" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.802159" elapsed="0.128479"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.800364" elapsed="0.130502"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.799846" elapsed="0.131126"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.798849" elapsed="0.132246"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.798390" elapsed="0.132800"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.932327" level="INFO">${next} = 18670</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.931529" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.933677" level="INFO">${current_port} = 18670</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:55.932758" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.792641" elapsed="0.141328"/>
</kw>
<msg time="2026-08-15T23:56:55.934058" level="INFO">Repeating keyword, round 841/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:55.936541" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:55.936297" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.936254" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.937403" level="INFO">${current_Date} = 2026-08-15 23:56:55.937</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:55.937089" elapsed="0.000347"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:55.937911" level="INFO">${ellapsed_seconds} = 2574.4</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:55.937585" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.938246" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:55.938007" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:55.937988" elapsed="0.000336"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:55.935727" elapsed="0.002642"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.938902" level="INFO">${number} = 841</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.938512" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.940340" level="INFO">${number} = 841</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.939993" elapsed="0.000374"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:55.942365" level="INFO">${device-port} = 18670</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:55.941543" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.945136" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:55.972306" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:55.972531" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.945028" elapsed="0.027562"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:55.973538" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:55.973673" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:55.972755" elapsed="0.001132">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:55.972709" elapsed="0.001279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:55.944708" elapsed="0.029547">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:55.944135" elapsed="0.030261"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:55.975256" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18670 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.030458" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.030669" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:55.974741" elapsed="0.055982"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.030873" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:56.031271" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:55.943692" elapsed="0.087688"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.031979" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:55.942905" elapsed="0.090169"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:55.941086" elapsed="0.092175"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:55.940523" elapsed="0.092837"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.939527" elapsed="0.093954"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:55.939082" elapsed="0.094494"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.034696" level="INFO">${next} = 18671</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.033954" elapsed="0.000802"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.036048" level="INFO">${current_port} = 18671</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.035167" elapsed="0.000979"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:55.934475" elapsed="0.101799"/>
</kw>
<msg time="2026-08-15T23:56:56.036359" level="INFO">Repeating keyword, round 842/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.038920" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.038640" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.038598" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.039795" level="INFO">${current_Date} = 2026-08-15 23:56:56.040</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.039458" elapsed="0.000435"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.041008" level="INFO">${ellapsed_seconds} = 2574.297</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.040232" elapsed="0.000836"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.041548" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.041233" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.041186" elapsed="0.000440"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.038112" elapsed="0.003560"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.042197" level="INFO">${number} = 842</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.041833" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.043628" level="INFO">${number} = 842</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.043290" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.045643" level="INFO">${device-port} = 18671</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.044843" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.048363" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.083879" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.084112" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.048260" elapsed="0.035912"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.085093" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:56.085231" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.084333" elapsed="0.001003">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.084288" elapsed="0.001139">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.047983" elapsed="0.037707">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.047394" elapsed="0.038536"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.086836" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18671 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.141948" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.142160" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.086280" elapsed="0.055936"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.142329" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:56.142726" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.046983" elapsed="0.095923"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.143499" elapsed="0.000942"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.046171" elapsed="0.098466"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.044345" elapsed="0.100588"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.043830" elapsed="0.101217"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.042848" elapsed="0.102328"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.042383" elapsed="0.102899"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.146469" level="INFO">${next} = 18672</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.145636" elapsed="0.000897"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.147921" level="INFO">${current_port} = 18672</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.146965" elapsed="0.001064"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.036771" elapsed="0.111391"/>
</kw>
<msg time="2026-08-15T23:56:56.148256" level="INFO">Repeating keyword, round 843/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.150304" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.150139" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.150103" elapsed="0.000295"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.150861" level="INFO">${current_Date} = 2026-08-15 23:56:56.151</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.150609" elapsed="0.000293"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.151544" level="INFO">${ellapsed_seconds} = 2574.186</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.151112" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.152044" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.151690" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.151655" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.149753" elapsed="0.002472"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.153001" level="INFO">${number} = 843</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.152436" elapsed="0.000603"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.155057" level="INFO">${number} = 843</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.154550" elapsed="0.000553"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.157836" level="INFO">${device-port} = 18672</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.156872" elapsed="0.001048"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.162794" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.196096" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.196323" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.162680" elapsed="0.033702"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.197350" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:56.197484" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.196548" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.196501" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.162388" elapsed="0.035697">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.159578" elapsed="0.038649"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.199084" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18672 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.268647" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.268908" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.198570" elapsed="0.070401"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.269084" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:56.269496" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.159162" elapsed="0.110443"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.270208" elapsed="0.001008"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.158359" elapsed="0.113047"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.156109" elapsed="0.115484"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.155333" elapsed="0.116359"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.153913" elapsed="0.117942"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.153263" elapsed="0.118693"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.273193" level="INFO">${next} = 18673</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.272299" elapsed="0.000956"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.274523" level="INFO">${current_port} = 18673</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.273618" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.148683" elapsed="0.126060"/>
</kw>
<msg time="2026-08-15T23:56:56.274895" level="INFO">Repeating keyword, round 844/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.277427" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.277235" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.277187" elapsed="0.000329"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.278009" level="INFO">${current_Date} = 2026-08-15 23:56:56.278</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.277763" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.278686" level="INFO">${ellapsed_seconds} = 2574.059</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.278249" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.279179" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.278840" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.278795" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.276663" elapsed="0.002693"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.280081" level="INFO">${number} = 844</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.279556" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.282148" level="INFO">${number} = 844</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.281652" elapsed="0.000533"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.285016" level="INFO">${device-port} = 18673</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.283861" elapsed="0.001267"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.289043" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.312347" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.312616" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.288773" elapsed="0.023915"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.313622" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:56.313760" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.312901" elapsed="0.000997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.312852" elapsed="0.001142">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.288076" elapsed="0.026196">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.287461" elapsed="0.027030"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.315372" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18673 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.370901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.371185" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.314876" elapsed="0.056369"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.371374" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:56:56.371875" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.286890" elapsed="0.085118"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.372653" elapsed="0.000991"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.285743" elapsed="0.088141"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.283202" elapsed="0.090904"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.282406" elapsed="0.091809"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.281030" elapsed="0.093314"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.280333" elapsed="0.094111"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.375663" level="INFO">${next} = 18674</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.374797" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.377306" level="INFO">${current_port} = 18674</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.376302" elapsed="0.001108"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.275324" elapsed="0.102218"/>
</kw>
<msg time="2026-08-15T23:56:56.377630" level="INFO">Repeating keyword, round 845/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.380351" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.380071" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.380026" elapsed="0.000475"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.381311" level="INFO">${current_Date} = 2026-08-15 23:56:56.381</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.380927" elapsed="0.000434"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.382063" level="INFO">${ellapsed_seconds} = 2573.956</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.381578" elapsed="0.000523"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.382560" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.382201" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.382174" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.379481" elapsed="0.003256"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.383508" level="INFO">${number} = 845</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.382966" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.385616" level="INFO">${number} = 845</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.385119" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.388482" level="INFO">${device-port} = 18674</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.387337" elapsed="0.001277"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.392557" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.424915" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.425152" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.392100" elapsed="0.033114"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.426196" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:56:56.426354" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.425413" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.425359" elapsed="0.001319">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.391601" elapsed="0.035404">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.391026" elapsed="0.036128"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.428032" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18674 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.496536" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.496756" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.427512" elapsed="0.069337"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.496967" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:56.497414" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.390397" elapsed="0.107138"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.498142" elapsed="0.000922"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.389263" elapsed="0.109999"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.386667" elapsed="0.112814"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.385900" elapsed="0.113686"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.384437" elapsed="0.115273"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.383769" elapsed="0.116076"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.501125" level="INFO">${next} = 18675</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.500201" elapsed="0.000986"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.502551" level="INFO">${current_port} = 18675</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.501592" elapsed="0.001054"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.378126" elapsed="0.124729"/>
</kw>
<msg time="2026-08-15T23:56:56.502953" level="INFO">Repeating keyword, round 846/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.505480" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.505331" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.505282" elapsed="0.000262"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.505918" level="INFO">${current_Date} = 2026-08-15 23:56:56.506</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.505732" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.506428" level="INFO">${ellapsed_seconds} = 2573.831</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.506097" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.506777" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.506525" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.506506" elapsed="0.000367"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.504746" elapsed="0.002173"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.507437" level="INFO">${number} = 846</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.507065" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.508915" level="INFO">${number} = 846</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.508550" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.510936" level="INFO">${device-port} = 18675</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.510117" elapsed="0.000900"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.513519" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.544109" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.544211" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.513419" elapsed="0.030825"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.545279" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:56.545420" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.544446" elapsed="0.001083">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.544350" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.513138" elapsed="0.032792">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.512717" elapsed="0.033430"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.547022" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18675 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.612655" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.612936" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.546502" elapsed="0.066495"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.613120" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:56.613575" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.512274" elapsed="0.101415"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.614330" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.511462" elapsed="0.103985"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.509643" elapsed="0.105996"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.509106" elapsed="0.106635"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.508086" elapsed="0.107830"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.507620" elapsed="0.108398"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.617210" level="INFO">${next} = 18676</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.616399" elapsed="0.000879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.618620" level="INFO">${current_port} = 18676</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.617670" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.503388" elapsed="0.115519"/>
</kw>
<msg time="2026-08-15T23:56:56.618999" level="INFO">Repeating keyword, round 847/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.621725" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.621461" elapsed="0.000393"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.621304" elapsed="0.000603"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.622544" level="INFO">${current_Date} = 2026-08-15 23:56:56.622</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.622291" elapsed="0.000282"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.623080" level="INFO">${ellapsed_seconds} = 2573.715</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.622726" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.623433" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.623179" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.623159" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.620771" elapsed="0.002788"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.624094" level="INFO">${number} = 847</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.623707" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.625618" level="INFO">${number} = 847</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.625270" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.627687" level="INFO">${device-port} = 18676</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.626842" elapsed="0.000926"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.630327" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.664998" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.665360" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.630217" elapsed="0.035221"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.666721" elapsed="0.000109"/>
</kw>
<msg time="2026-08-15T23:56:56.666929" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.665684" elapsed="0.001516">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.665615" elapsed="0.001699">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.629932" elapsed="0.037704">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.629508" elapsed="0.038320"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.668873" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18676 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.732546" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.732765" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.668247" elapsed="0.064612"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.732980" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:56:56.733427" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.629084" elapsed="0.104456"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.734159" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.628234" elapsed="0.107057"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.626363" elapsed="0.109124"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.625822" elapsed="0.109771"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.624789" elapsed="0.110931"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.624283" elapsed="0.111577"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.737093" level="INFO">${next} = 18677</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.736218" elapsed="0.000936"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.738438" level="INFO">${current_port} = 18677</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.737522" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.619443" elapsed="0.119218"/>
</kw>
<msg time="2026-08-15T23:56:56.738748" level="INFO">Repeating keyword, round 848/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.741441" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.741190" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.741144" elapsed="0.000442"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.742395" level="INFO">${current_Date} = 2026-08-15 23:56:56.742</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.742030" elapsed="0.000426"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.743576" level="INFO">${ellapsed_seconds} = 2573.595</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.742855" elapsed="0.000781"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.744431" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.743795" elapsed="0.000766"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.743753" elapsed="0.000862"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.740568" elapsed="0.004152"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.745566" level="INFO">${number} = 848</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.745085" elapsed="0.000508"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.747035" level="INFO">${number} = 848</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.746674" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.749050" level="INFO">${device-port} = 18677</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.748243" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.751615" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.784905" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.785202" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.751508" elapsed="0.033760"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.786332" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:56.786481" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.785471" elapsed="0.001123">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.785412" elapsed="0.001280">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.751228" elapsed="0.035796">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.750833" elapsed="0.036451"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.788255" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18677 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.856939" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.857170" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.787653" elapsed="0.069572"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.857346" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:56:56.857844" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.750390" elapsed="0.107572"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.858541" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.749574" elapsed="0.110119"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.747763" elapsed="0.112171"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.747222" elapsed="0.112822"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.746216" elapsed="0.114000"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.745750" elapsed="0.114577"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.861504" level="INFO">${next} = 18678</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.860679" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.862966" level="INFO">${current_port} = 18678</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.861970" elapsed="0.001104"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.739241" elapsed="0.123968"/>
</kw>
<msg time="2026-08-15T23:56:56.863299" level="INFO">Repeating keyword, round 849/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.865689" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.865535" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.865506" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.866243" level="INFO">${current_Date} = 2026-08-15 23:56:56.866</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.866011" elapsed="0.000272"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.867001" level="INFO">${ellapsed_seconds} = 2573.471</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.866494" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.867494" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.867142" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.867115" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.865153" elapsed="0.002520"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.868461" level="INFO">${number} = 849</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.867911" elapsed="0.000588"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.870561" level="INFO">${number} = 849</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.870073" elapsed="0.000527"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.873492" level="INFO">${device-port} = 18678</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.872328" elapsed="0.001280"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.877427" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:56.908602" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.908902" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.877109" elapsed="0.031858"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.910096" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:56:56.910241" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:56.909165" elapsed="0.001352">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:56.909110" elapsed="0.001531">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.876657" elapsed="0.034328">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.876061" elapsed="0.035077"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.912171" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18678 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:56.970525" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:56.970766" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.911570" elapsed="0.059297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:56.970996" elapsed="0.000086"/>
</return>
<msg time="2026-08-15T23:56:56.971464" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.875441" elapsed="0.096139"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:56.972252" elapsed="0.000963"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.874275" elapsed="0.099143"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.871613" elapsed="0.102022"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.870861" elapsed="0.102880"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.869400" elapsed="0.104517"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.868721" elapsed="0.105300"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.975216" level="INFO">${next} = 18679</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.974369" elapsed="0.000910"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.976669" level="INFO">${current_port} = 18679</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:56.975684" elapsed="0.001088"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.863746" elapsed="0.113228"/>
</kw>
<msg time="2026-08-15T23:56:56.977065" level="INFO">Repeating keyword, round 850/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:56.979739" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:56.979471" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.979425" elapsed="0.000499"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.980615" level="INFO">${current_Date} = 2026-08-15 23:56:56.980</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:56.980368" elapsed="0.000285"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:56.981178" level="INFO">${ellapsed_seconds} = 2573.357</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:56.980835" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:56.981550" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:56.981285" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:56.981261" elapsed="0.000371"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:56.978906" elapsed="0.002782"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.982241" level="INFO">${number} = 850</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.981857" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.983751" level="INFO">${number} = 850</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.983379" elapsed="0.000403"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:56.985879" level="INFO">${device-port} = 18679</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:56.985046" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:56.988701" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.025000" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.025236" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:56.988405" elapsed="0.036893"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.026275" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:57.026418" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.025476" elapsed="0.001070">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.025425" elapsed="0.001218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:56.988125" elapsed="0.038862">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:56.987674" elapsed="0.039547"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.028151" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18679 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.083000" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.083233" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.027574" elapsed="0.055717"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.083414" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:56:57.083894" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:56.987251" elapsed="0.096790"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.084620" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:56.986413" elapsed="0.099326"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:56.984553" elapsed="0.101429"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:56.983965" elapsed="0.102119"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.982920" elapsed="0.103290"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:56.982429" elapsed="0.103881"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.087461" level="INFO">${next} = 18680</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.086655" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.088892" level="INFO">${current_port} = 18680</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.087927" elapsed="0.001064"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:56.977517" elapsed="0.111629"/>
</kw>
<msg time="2026-08-15T23:56:57.089239" level="INFO">Repeating keyword, round 851/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.091834" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.091556" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.091514" elapsed="0.000528"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.092502" level="INFO">${current_Date} = 2026-08-15 23:56:57.092</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.092334" elapsed="0.000194"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.093014" level="INFO">${ellapsed_seconds} = 2573.245</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.092675" elapsed="0.000365"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.093359" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.093110" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.093091" elapsed="0.000347"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.091025" elapsed="0.002458"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.094005" level="INFO">${number} = 851</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.093627" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.095458" level="INFO">${number} = 851</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.095107" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.097472" level="INFO">${device-port} = 18680</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.096655" elapsed="0.000897"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.100206" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.136123" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.136373" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.099934" elapsed="0.036502"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.137411" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:57.137552" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.136613" elapsed="0.001151">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.136563" elapsed="0.001338">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.099630" elapsed="0.038560">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.099230" elapsed="0.039121"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.139236" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18680 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.204835" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.205058" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.138709" elapsed="0.066404"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.205225" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:57.205630" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.098792" elapsed="0.106947"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.206346" elapsed="0.000897"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.098017" elapsed="0.109429"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.096212" elapsed="0.111425"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.095643" elapsed="0.112099"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.094638" elapsed="0.113314"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.094186" elapsed="0.113867"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.209213" level="INFO">${next} = 18681</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.208396" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.210584" level="INFO">${current_port} = 18681</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.209632" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.089681" elapsed="0.121212"/>
</kw>
<msg time="2026-08-15T23:56:57.211000" level="INFO">Repeating keyword, round 852/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.213705" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.213426" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.213381" elapsed="0.000507"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.214663" level="INFO">${current_Date} = 2026-08-15 23:56:57.214</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.214294" elapsed="0.000430"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.215831" level="INFO">${ellapsed_seconds} = 2573.123</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.215102" elapsed="0.000855"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.216546" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.216126" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.216082" elapsed="0.000545"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.212862" elapsed="0.003812"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.217208" level="INFO">${number} = 852</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.216838" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.218664" level="INFO">${number} = 852</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.218304" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.220682" level="INFO">${device-port} = 18681</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.219893" elapsed="0.000870"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.223494" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.260289" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.260544" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.223384" elapsed="0.037231"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.261573" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:57.261712" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.260789" elapsed="0.001065">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.260738" elapsed="0.001228">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.222951" elapsed="0.039298">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.222510" elapsed="0.039958"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.263414" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18681 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.328916" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.329253" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.262902" elapsed="0.066410"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.329476" elapsed="0.000103"/>
</return>
<msg time="2026-08-15T23:56:57.330010" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.222072" elapsed="0.108049"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.330760" elapsed="0.000982"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.221231" elapsed="0.110797"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.219399" elapsed="0.112822"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.218873" elapsed="0.113453"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.217854" elapsed="0.114599"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.217392" elapsed="0.115160"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.333709" level="INFO">${next} = 18682</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.332942" elapsed="0.000826"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.334893" level="INFO">${current_port} = 18682</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.334272" elapsed="0.000684"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.211462" elapsed="0.123582"/>
</kw>
<msg time="2026-08-15T23:56:57.335104" level="INFO">Repeating keyword, round 853/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.336856" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.336673" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.336645" elapsed="0.000310"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.337397" level="INFO">${current_Date} = 2026-08-15 23:56:57.337</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.337163" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.338110" level="INFO">${ellapsed_seconds} = 2573.0</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.337641" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.338592" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.338246" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.338220" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.336334" elapsed="0.002433"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.339512" level="INFO">${number} = 853</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.338994" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.341707" level="INFO">${number} = 853</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.341195" elapsed="0.000551"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.344594" level="INFO">${device-port} = 18682</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.343514" elapsed="0.001168"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.347428" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.380751" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.381058" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.347323" elapsed="0.033810"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.382104" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:56:57.382245" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.381311" elapsed="0.001144">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.381260" elapsed="0.001297">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.347038" elapsed="0.035892">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.346400" elapsed="0.036741"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.384278" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18682 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.449074" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.449302" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.383518" elapsed="0.065840"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.449472" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:57.449926" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.345977" elapsed="0.104062"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.450607" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.345154" elapsed="0.106573"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.342827" elapsed="0.109150"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.341996" elapsed="0.110082"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.340513" elapsed="0.111691"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.339789" elapsed="0.112511"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.453449" level="INFO">${next} = 18683</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.452646" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.454773" level="INFO">${current_port} = 18683</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.453924" elapsed="0.000989"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.335441" elapsed="0.119602"/>
</kw>
<msg time="2026-08-15T23:56:57.455128" level="INFO">Repeating keyword, round 854/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.457200" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.457039" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.457013" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.457764" level="INFO">${current_Date} = 2026-08-15 23:56:57.458</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.457543" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.458460" level="INFO">${ellapsed_seconds} = 2572.879</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.458029" elapsed="0.000468"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.458947" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.458595" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.458570" elapsed="0.000489"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.456675" elapsed="0.002448"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.459885" level="INFO">${number} = 854</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.459326" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.461893" level="INFO">${number} = 854</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.461401" elapsed="0.000529"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.464716" level="INFO">${device-port} = 18683</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.463546" elapsed="0.001314"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.468602" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.500412" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.500640" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.468504" elapsed="0.032193"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.501620" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:57.501754" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.500910" elapsed="0.000982">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.500857" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.468189" elapsed="0.034094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.467216" elapsed="0.035307"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.503460" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18683 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.568574" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.568841" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.502942" elapsed="0.065960"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.569019" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:56:57.569538" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.466602" elapsed="0.103061"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.570324" elapsed="0.001008"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.465481" elapsed="0.106152"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.462917" elapsed="0.108974"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.462158" elapsed="0.109842"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.460762" elapsed="0.111364"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.460140" elapsed="0.112088"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.573554" level="INFO">${next} = 18684</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.572646" elapsed="0.000978"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.575057" level="INFO">${current_port} = 18684</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.574043" elapsed="0.001118"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.455550" elapsed="0.119747"/>
</kw>
<msg time="2026-08-15T23:56:57.575383" level="INFO">Repeating keyword, round 855/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.578454" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.578172" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.578112" elapsed="0.000507"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.579363" level="INFO">${current_Date} = 2026-08-15 23:56:57.579</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.579000" elapsed="0.000424"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.580496" level="INFO">${ellapsed_seconds} = 2572.758</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.579860" elapsed="0.000663"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.580886" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.580596" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.580577" elapsed="0.000392"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.577501" elapsed="0.003514"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.581537" level="INFO">${number} = 855</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.581161" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.583110" level="INFO">${number} = 855</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.582735" elapsed="0.000408"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.585225" level="INFO">${device-port} = 18684</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.584374" elapsed="0.000936"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.590651" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.620833" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.621091" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.590518" elapsed="0.030632"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.622147" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:57.622291" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.621343" elapsed="0.001197">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.621287" elapsed="0.001361">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.590219" elapsed="0.032746">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.587038" elapsed="0.036073"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.624214" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18684 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.699049" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.699267" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.623495" elapsed="0.075826"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.699438" elapsed="0.000114"/>
</return>
<msg time="2026-08-15T23:56:57.699971" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.586593" elapsed="0.113495"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.700680" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.585767" elapsed="0.116128"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.583886" elapsed="0.118212"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.583304" elapsed="0.118903"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.582227" elapsed="0.120128"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.581731" elapsed="0.120738"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.703763" level="INFO">${next} = 18685</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.702905" elapsed="0.000983"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.705359" level="INFO">${current_port} = 18685</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.704333" elapsed="0.001126"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.576014" elapsed="0.129585"/>
</kw>
<msg time="2026-08-15T23:56:57.705691" level="INFO">Repeating keyword, round 856/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.708425" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.708121" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.708078" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.708887" level="INFO">${current_Date} = 2026-08-15 23:56:57.709</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.708694" elapsed="0.000220"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.709404" level="INFO">${ellapsed_seconds} = 2572.628</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.709066" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.709766" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.709501" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.709483" elapsed="0.000387"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.707538" elapsed="0.002380"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.710437" level="INFO">${number} = 856</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.710068" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.711941" level="INFO">${number} = 856</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.711574" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.713968" level="INFO">${device-port} = 18685</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.713162" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.716731" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.752449" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.752679" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.716631" elapsed="0.036107"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.753683" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:57.753852" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.752950" elapsed="0.001011">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.752899" elapsed="0.001158">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.716172" elapsed="0.038206">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.715747" elapsed="0.038854"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.755605" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18685 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.820862" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.821122" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.755016" elapsed="0.066163"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.821308" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:56:57.821747" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.715309" elapsed="0.106590"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.822513" elapsed="0.001062"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.714495" elapsed="0.109347"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.712683" elapsed="0.111372"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.712129" elapsed="0.112053"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.711090" elapsed="0.113259"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.710620" elapsed="0.113838"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.825672" level="INFO">${next} = 18686</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.824870" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.827078" level="INFO">${current_port} = 18686</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.826143" elapsed="0.001035"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.706173" elapsed="0.121135"/>
</kw>
<msg time="2026-08-15T23:56:57.827460" level="INFO">Repeating keyword, round 857/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.829488" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.829328" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.829299" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.830041" level="INFO">${current_Date} = 2026-08-15 23:56:57.830</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.829786" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.830874" level="INFO">${ellapsed_seconds} = 2572.507</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.830385" elapsed="0.000529"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.831652" elapsed="0.000136"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.831026" elapsed="0.000956"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.830996" elapsed="0.001075"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.828985" elapsed="0.003264"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.834032" level="INFO">${number} = 857</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.832739" elapsed="0.001368"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.837692" level="INFO">${number} = 857</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.836904" elapsed="0.000850"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.841442" level="INFO">${device-port} = 18686</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.840589" elapsed="0.000936"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.844484" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.876832" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.877065" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.844048" elapsed="0.033077"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.878064" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:56:57.878202" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.877305" elapsed="0.001120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.877252" elapsed="0.001274">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.843709" elapsed="0.035141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.843269" elapsed="0.035729"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.879905" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18686 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:57.944723" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.944978" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.879349" elapsed="0.065686"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:57.945152" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:56:57.945564" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.842849" elapsed="0.102859"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:57.946334" elapsed="0.001006"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.842021" elapsed="0.105539"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.839517" elapsed="0.108257"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.838146" elapsed="0.109785"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.835750" elapsed="0.112328"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.834494" elapsed="0.113688"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.949461" level="INFO">${next} = 18687</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.948556" elapsed="0.000982"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.950978" level="INFO">${current_port} = 18687</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:57.949956" elapsed="0.001124"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.827974" elapsed="0.123234"/>
</kw>
<msg time="2026-08-15T23:56:57.951296" level="INFO">Repeating keyword, round 858/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:57.953912" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:57.953627" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.953584" elapsed="0.000474"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.954862" level="INFO">${current_Date} = 2026-08-15 23:56:57.955</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:57.954457" elapsed="0.000467"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:57.956089" level="INFO">${ellapsed_seconds} = 2572.382</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:57.955262" elapsed="0.000886"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.956691" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:57.956310" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:57.956264" elapsed="0.000509"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:57.953088" elapsed="0.003754"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.957364" level="INFO">${number} = 858</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.956994" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.958861" level="INFO">${number} = 858</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.958481" elapsed="0.000408"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:57.960953" level="INFO">${device-port} = 18687</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:57.960114" elapsed="0.000921"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.963559" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:57.996417" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:57.996648" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.963457" elapsed="0.033251"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:57.997629" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:57.997763" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:57.996917" elapsed="0.000989">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:57.996868" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:57.963159" elapsed="0.035120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:57.962736" elapsed="0.035760"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:57.999397" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18687 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.068580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.068841" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:57.998880" elapsed="0.070021"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.069013" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:58.069418" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:57.962320" elapsed="0.107208"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.070137" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:57.961499" elapsed="0.109778"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:57.959632" elapsed="0.111856"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:57.959061" elapsed="0.112530"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.958009" elapsed="0.113707"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:57.957545" elapsed="0.114312"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.073047" level="INFO">${next} = 18688</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.072212" elapsed="0.000895"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.074360" level="INFO">${current_port} = 18688</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.073471" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:57.951755" elapsed="0.122828"/>
</kw>
<msg time="2026-08-15T23:56:58.074670" level="INFO">Repeating keyword, round 859/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.077233" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.076990" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.076946" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.078072" level="INFO">${current_Date} = 2026-08-15 23:56:58.078</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.077701" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.079408" level="INFO">${ellapsed_seconds} = 2572.259</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.078471" elapsed="0.001004"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.080253" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.079658" elapsed="0.000720"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.079608" elapsed="0.000826"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.076424" elapsed="0.004113"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.081389" level="INFO">${number} = 859</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.080939" elapsed="0.000477"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.082848" level="INFO">${number} = 859</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.082490" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.084928" level="INFO">${device-port} = 18688</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.084091" elapsed="0.000919"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.087541" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.124732" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.124998" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.087439" elapsed="0.037619"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.125995" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:56:58.126134" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.125226" elapsed="0.001097">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.125179" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.087104" elapsed="0.039590">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.086684" elapsed="0.040183"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.127753" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18688 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.196941" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.197174" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.127250" elapsed="0.069982"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.197349" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:58.197768" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.086264" elapsed="0.111664"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.198529" elapsed="0.001109"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.085452" elapsed="0.114440"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.083605" elapsed="0.116487"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.083053" elapsed="0.117141"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.082034" elapsed="0.118285"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.081572" elapsed="0.118842"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.201584" level="INFO">${next} = 18689</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.200770" elapsed="0.000875"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.203067" level="INFO">${current_port} = 18689</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.202060" elapsed="0.001137"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.075146" elapsed="0.128187"/>
</kw>
<msg time="2026-08-15T23:56:58.203419" level="INFO">Repeating keyword, round 860/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.205999" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.205715" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.205670" elapsed="0.000481"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.207018" level="INFO">${current_Date} = 2026-08-15 23:56:58.207</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.206607" elapsed="0.000482"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.208211" level="INFO">${ellapsed_seconds} = 2572.13</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.207521" elapsed="0.000721"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.208571" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.208316" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.208297" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.205178" elapsed="0.003555"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.209292" level="INFO">${number} = 860</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.208915" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.210743" level="INFO">${number} = 860</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.210397" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.212930" level="INFO">${device-port} = 18689</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.212094" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.215569" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.248530" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.248796" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.215461" elapsed="0.033448"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.249890" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:56:58.250031" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.249103" elapsed="0.001038">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.249050" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.215173" elapsed="0.035337">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.214729" elapsed="0.035998"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.251655" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18689 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.316623" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.316885" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.251157" elapsed="0.065788"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.317059" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:56:58.317466" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.214302" elapsed="0.103273"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.318191" elapsed="0.001156"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.213460" elapsed="0.106108"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.211573" elapsed="0.108186"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.210951" elapsed="0.108960"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.209945" elapsed="0.110093"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.209477" elapsed="0.110661"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.321291" level="INFO">${next} = 18690</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.320489" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.322618" level="INFO">${current_port} = 18690</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.321719" elapsed="0.001010"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.203893" elapsed="0.119083"/>
</kw>
<msg time="2026-08-15T23:56:58.323098" level="INFO">Repeating keyword, round 861/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.325712" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.325467" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.325423" elapsed="0.000472"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.326583" level="INFO">${current_Date} = 2026-08-15 23:56:58.326</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.326233" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.327840" level="INFO">${ellapsed_seconds} = 2572.011</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.327013" elapsed="0.000890"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.328588" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.328065" elapsed="0.000647"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.328022" elapsed="0.000743"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.324893" elapsed="0.004007"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.330078" level="INFO">${number} = 861</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.329229" elapsed="0.000909"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.332444" level="INFO">${number} = 861</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.332072" elapsed="0.000399"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.334512" level="INFO">${device-port} = 18690</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.333686" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.337269" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.400061" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.400301" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.337164" elapsed="0.063196"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.401315" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:56:58.401451" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.400537" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.400486" elapsed="0.001290">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.336886" elapsed="0.065215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.336465" elapsed="0.065782"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.403174" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18690 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.468905" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.469091" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.402602" elapsed="0.066536"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.469249" elapsed="0.000056"/>
</return>
<msg time="2026-08-15T23:56:58.469568" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.335906" elapsed="0.133749"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.470140" elapsed="0.000684"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.335095" elapsed="0.135914"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.333209" elapsed="0.137930"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.332650" elapsed="0.138569"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.331579" elapsed="0.139723"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.330512" elapsed="0.140870"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.472168" level="INFO">${next} = 18691</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.471627" elapsed="0.000581"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.473060" level="INFO">${current_port} = 18691</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.472448" elapsed="0.000676"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.323540" elapsed="0.149672"/>
</kw>
<msg time="2026-08-15T23:56:58.473269" level="INFO">Repeating keyword, round 862/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.475005" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.474778" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.474749" elapsed="0.000353"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.475608" level="INFO">${current_Date} = 2026-08-15 23:56:58.475</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.475371" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.476364" level="INFO">${ellapsed_seconds} = 2571.862</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.475893" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.476883" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.476507" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.476480" elapsed="0.000523"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.474423" elapsed="0.002646"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.477839" level="INFO">${number} = 862</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.477282" elapsed="0.000605"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.480012" level="INFO">${number} = 862</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.479483" elapsed="0.000569"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.483069" level="INFO">${device-port} = 18691</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.481789" elapsed="0.001400"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.487229" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.520863" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.521005" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.486668" elapsed="0.034374"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.521594" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:58.521677" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.521150" elapsed="0.000593">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.521118" elapsed="0.000702">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.486262" elapsed="0.035737">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.485659" elapsed="0.036473"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.522655" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18691 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.592359" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.592491" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.522353" elapsed="0.070173"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.592597" elapsed="0.000047"/>
</return>
<msg time="2026-08-15T23:56:58.592879" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.485052" elapsed="0.107899"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.593305" elapsed="0.000548"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.483874" elapsed="0.110102"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.481131" elapsed="0.112965"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.480286" elapsed="0.113874"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.478779" elapsed="0.115458"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.478118" elapsed="0.116181"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.595028" level="INFO">${next} = 18692</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.594512" elapsed="0.000554"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.595851" level="INFO">${current_port} = 18692</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.595292" elapsed="0.000621"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.473555" elapsed="0.122438"/>
</kw>
<msg time="2026-08-15T23:56:58.596049" level="INFO">Repeating keyword, round 863/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.597582" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.597431" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.597404" elapsed="0.000266"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.598135" level="INFO">${current_Date} = 2026-08-15 23:56:58.598</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.597920" elapsed="0.000251"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.598795" level="INFO">${ellapsed_seconds} = 2571.739</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.598376" elapsed="0.000489"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.599291" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.598966" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.598939" elapsed="0.000461"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.597100" elapsed="0.002361"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.600192" level="INFO">${number} = 863</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.599661" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.602206" level="INFO">${number} = 863</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.601703" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.604519" level="INFO">${device-port} = 18692</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.603732" elapsed="0.000867"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.607213" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.644533" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.644684" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.606967" elapsed="0.037755"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.645316" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:58.645401" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.644861" elapsed="0.000656">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.644828" elapsed="0.000751">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.606651" elapsed="0.039100">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.606271" elapsed="0.039593"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.646393" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18692 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.716925" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.717133" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.646085" elapsed="0.071100"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.717292" elapsed="0.000065"/>
</return>
<msg time="2026-08-15T23:56:58.717566" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.605856" elapsed="0.111781"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.718021" elapsed="0.000535"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.605060" elapsed="0.113616"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.603246" elapsed="0.115593"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.602469" elapsed="0.116436"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.601083" elapsed="0.117901"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.600444" elapsed="0.118600"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.719729" level="INFO">${next} = 18693</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.719261" elapsed="0.000506"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.720555" level="INFO">${current_port} = 18693</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.720025" elapsed="0.000590"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.596307" elapsed="0.124390"/>
</kw>
<msg time="2026-08-15T23:56:58.720751" level="INFO">Repeating keyword, round 864/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.722338" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.722185" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.722158" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.722960" level="INFO">${current_Date} = 2026-08-15 23:56:58.723</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.722683" elapsed="0.000314"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.723627" level="INFO">${ellapsed_seconds} = 2571.614</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.723206" elapsed="0.000457"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.724110" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.723761" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.723736" elapsed="0.000486"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.721852" elapsed="0.002432"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.725018" level="INFO">${number} = 864</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.724487" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.727068" level="INFO">${number} = 864</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.726538" elapsed="0.000567"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.729834" level="INFO">${device-port} = 18693</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.728698" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.733651" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.768789" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.768949" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.733513" elapsed="0.035473"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.769532" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:58.769616" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.769093" elapsed="0.000589">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.769061" elapsed="0.000678">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.732914" elapsed="0.037016">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.732285" elapsed="0.037778"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.770590" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18693 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.840405" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.840566" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.770283" elapsed="0.070326"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.840679" elapsed="0.000047"/>
</return>
<msg time="2026-08-15T23:56:58.840957" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.731677" elapsed="0.109352"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.841375" elapsed="0.000546"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.730553" elapsed="0.111483"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.728078" elapsed="0.114077"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.727324" elapsed="0.114894"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.725911" elapsed="0.116382"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.725271" elapsed="0.117083"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.843073" level="INFO">${next} = 18694</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.842567" elapsed="0.000543"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.843896" level="INFO">${current_port} = 18694</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.843334" elapsed="0.000622"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.721044" elapsed="0.122991"/>
</kw>
<msg time="2026-08-15T23:56:58.844089" level="INFO">Repeating keyword, round 865/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.845655" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.845502" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.845476" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.846200" level="INFO">${current_Date} = 2026-08-15 23:56:58.846</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.845984" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.846920" level="INFO">${ellapsed_seconds} = 2571.491</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.846443" elapsed="0.000514"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.847464" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.847055" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.847029" elapsed="0.000546"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.845162" elapsed="0.002476"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.848378" level="INFO">${number} = 865</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.847869" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.850389" level="INFO">${number} = 865</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.849913" elapsed="0.000513"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.853189" level="INFO">${device-port} = 18694</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.852081" elapsed="0.001220"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.857119" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:58.892222" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.892361" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.856979" elapsed="0.035418"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.892966" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:56:58.893050" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:58.892500" elapsed="0.000669">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:58.892470" elapsed="0.000761">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.856456" elapsed="0.036943">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.855663" elapsed="0.037823"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.894022" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18694 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:58.960555" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:58.960690" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.893701" elapsed="0.067023"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:58.960794" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:58.961076" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.855081" elapsed="0.106063"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:58.961492" elapsed="0.000549"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.853944" elapsed="0.108214"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.851415" elapsed="0.110861"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.850667" elapsed="0.111671"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.849278" elapsed="0.113137"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.848629" elapsed="0.113844"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.963190" level="INFO">${next} = 18695</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.962704" elapsed="0.000524"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.964003" level="INFO">${current_port} = 18695</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:58.963449" elapsed="0.000614"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.844355" elapsed="0.119788"/>
</kw>
<msg time="2026-08-15T23:56:58.964196" level="INFO">Repeating keyword, round 866/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:58.965725" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:58.965574" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.965547" elapsed="0.000298"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.966360" level="INFO">${current_Date} = 2026-08-15 23:56:58.966</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:58.966140" elapsed="0.000256"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:58.967078" level="INFO">${ellapsed_seconds} = 2571.371</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:58.966625" elapsed="0.000489"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:58.967543" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:58.967212" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:58.967187" elapsed="0.000466"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:58.965245" elapsed="0.002470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.968455" level="INFO">${number} = 866</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.967937" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.970474" level="INFO">${number} = 866</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.969994" elapsed="0.000517"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:58.972776" level="INFO">${device-port} = 18695</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:58.972007" elapsed="0.000866"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:58.975500" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.016510" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.016649" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:58.975404" elapsed="0.041281"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.017256" elapsed="0.000034"/>
</kw>
<msg time="2026-08-15T23:56:59.017339" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.016790" elapsed="0.000614">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.016759" elapsed="0.000702">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:58.975128" elapsed="0.042498">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:58.974529" elapsed="0.043226"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.018292" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18695 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.084530" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.084740" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.017993" elapsed="0.066801"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.084940" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:59.085340" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:58.974113" elapsed="0.111335"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.086043" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:58.973302" elapsed="0.113847"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:58.971528" elapsed="0.115806"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:58.970768" elapsed="0.116665"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.969350" elapsed="0.118206"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:58.968706" elapsed="0.118945"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.088794" level="INFO">${next} = 18696</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.088040" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.090159" level="INFO">${current_port} = 18696</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.089261" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:58.964452" elapsed="0.125934"/>
</kw>
<msg time="2026-08-15T23:56:59.090492" level="INFO">Repeating keyword, round 867/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.093047" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.092771" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.092729" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.093902" level="INFO">${current_Date} = 2026-08-15 23:56:59.094</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.093531" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.095053" level="INFO">${ellapsed_seconds} = 2571.243</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.094293" elapsed="0.000819"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.095635" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.095267" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.095226" elapsed="0.000518"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.092246" elapsed="0.003582"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.096543" level="INFO">${number} = 867</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.096033" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.098594" level="INFO">${number} = 867</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.098093" elapsed="0.000538"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.101342" level="INFO">${device-port} = 18696</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.100247" elapsed="0.001210"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.107960" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.135898" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.136117" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.107859" elapsed="0.028316"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.137082" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:59.137214" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.136340" elapsed="0.001054">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.136293" elapsed="0.001201">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.107549" elapsed="0.030215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.103875" elapsed="0.034065"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.138790" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18696 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.204327" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.204533" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.138283" elapsed="0.066303"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.204695" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:56:59.205137" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.103217" elapsed="0.102029"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.205794" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.102090" elapsed="0.104858"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.099599" elapsed="0.107540"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.098877" elapsed="0.108361"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.097445" elapsed="0.109916"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.096792" elapsed="0.110664"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.208601" level="INFO">${next} = 18697</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.207796" elapsed="0.000863"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.209952" level="INFO">${current_port} = 18697</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.209072" elapsed="0.000976"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.090995" elapsed="0.119180"/>
</kw>
<msg time="2026-08-15T23:56:59.210259" level="INFO">Repeating keyword, round 868/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.212829" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.212556" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.212515" elapsed="0.000461"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.213714" level="INFO">${current_Date} = 2026-08-15 23:56:59.214</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.213370" elapsed="0.000402"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.214899" level="INFO">${ellapsed_seconds} = 2571.123</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.214137" elapsed="0.000824"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.215530" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.215120" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.215077" elapsed="0.000532"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.212027" elapsed="0.003628"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.216177" level="INFO">${number} = 868</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.215813" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.217598" level="INFO">${number} = 868</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.217263" elapsed="0.000361"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.219595" level="INFO">${device-port} = 18697</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.218787" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.222295" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.252162" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.252382" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.222199" elapsed="0.030245"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.253350" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:59.253482" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.252609" elapsed="0.000976">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.252562" elapsed="0.001114">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.221734" elapsed="0.032244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.221346" elapsed="0.032847"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.255077" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18697 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.324658" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.324913" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.254566" elapsed="0.070404"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.325082" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:56:59.325484" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.220938" elapsed="0.104655"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.326194" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.220130" elapsed="0.107150"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.218318" elapsed="0.109150"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.217783" elapsed="0.109786"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.216820" elapsed="0.110874"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.216357" elapsed="0.111435"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.328979" level="INFO">${next} = 18698</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.328182" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.330278" level="INFO">${current_port} = 18698</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.329395" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.210694" elapsed="0.119860"/>
</kw>
<msg time="2026-08-15T23:56:59.330639" level="INFO">Repeating keyword, round 869/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.332485" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.332329" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.332303" elapsed="0.000270"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.333008" level="INFO">${current_Date} = 2026-08-15 23:56:59.333</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.332774" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.333665" level="INFO">${ellapsed_seconds} = 2571.004</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.333251" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.334146" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.333818" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.333773" elapsed="0.000481"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.332001" elapsed="0.002338"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.335083" level="INFO">${number} = 869</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.334547" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.337173" level="INFO">${number} = 869</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.336658" elapsed="0.000552"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.339962" level="INFO">${device-port} = 18698</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.338838" elapsed="0.001236"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.343770" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.380367" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.380590" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.343476" elapsed="0.037172"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.381553" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:56:59.381684" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.380850" elapsed="0.001049">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.380766" elapsed="0.001234">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.343063" elapsed="0.039237">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.342440" elapsed="0.040002"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.383301" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18698 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.448442" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.448652" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.382787" elapsed="0.065919"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.448861" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:59.449269" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.341798" elapsed="0.107580"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.450325" elapsed="0.000887"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.340680" elapsed="0.110722"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.338178" elapsed="0.113411"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.337429" elapsed="0.114261"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.335988" elapsed="0.115868"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.335337" elapsed="0.116622"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.453087" level="INFO">${next} = 18699</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.452301" elapsed="0.000846"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.454409" level="INFO">${current_port} = 18699</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.453505" elapsed="0.000999"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.331119" elapsed="0.123511"/>
</kw>
<msg time="2026-08-15T23:56:59.454715" level="INFO">Repeating keyword, round 870/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.457246" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.457001" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.456958" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.458157" level="INFO">${current_Date} = 2026-08-15 23:56:59.458</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.457780" elapsed="0.000490"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.458979" level="INFO">${ellapsed_seconds} = 2570.879</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.458535" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.459441" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.459115" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.459090" elapsed="0.000461"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.456443" elapsed="0.003171"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.460348" level="INFO">${number} = 870</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.459839" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.462362" level="INFO">${number} = 870</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.461876" elapsed="0.000525"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.465153" level="INFO">${device-port} = 18699</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.464037" elapsed="0.001227"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.468698" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.500565" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.500789" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.468564" elapsed="0.032322"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.501754" elapsed="0.000086"/>
</kw>
<msg time="2026-08-15T23:56:59.501921" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.501056" elapsed="0.000971">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.501008" elapsed="0.001111">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.468185" elapsed="0.034226">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.467618" elapsed="0.035004"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.503492" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18699 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.568494" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.568708" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.503009" elapsed="0.065754"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.568916" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:59.569321" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.467048" elapsed="0.102384"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.570037" elapsed="0.000900"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.465906" elapsed="0.105221"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.463367" elapsed="0.107950"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.462625" elapsed="0.108794"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.461241" elapsed="0.110303"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.460602" elapsed="0.111038"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.572769" level="INFO">${next} = 18700</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.572028" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.574143" level="INFO">${current_port} = 18700</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.573238" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.455193" elapsed="0.119179"/>
</kw>
<msg time="2026-08-15T23:56:59.574457" level="INFO">Repeating keyword, round 871/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.576982" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.576708" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.576665" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.577789" level="INFO">${current_Date} = 2026-08-15 23:56:59.578</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.577451" elapsed="0.000432"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.578739" level="INFO">${ellapsed_seconds} = 2570.759</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.578266" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.579085" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.578851" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.578831" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.576179" elapsed="0.003030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.579730" level="INFO">${number} = 871</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.579354" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.581174" level="INFO">${number} = 871</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.580836" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.583177" level="INFO">${device-port} = 18700</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.582374" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.585695" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.620403" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.620627" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.585600" elapsed="0.035085"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.621603" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:56:59.621735" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.620895" elapsed="0.001057">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.620843" elapsed="0.001212">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.585325" elapsed="0.037035">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.584937" elapsed="0.037566"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.623372" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18700 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.688456" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.688665" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.622887" elapsed="0.065832"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.688866" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:56:59.689271" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.584498" elapsed="0.104883"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.689982" elapsed="0.000911"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.583694" elapsed="0.107393"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.581903" elapsed="0.109373"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.581360" elapsed="0.110020"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.580375" elapsed="0.111128"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.579927" elapsed="0.111671"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.692735" level="INFO">${next} = 18701</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.691989" elapsed="0.000848"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.694118" level="INFO">${current_port} = 18701</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.693206" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.574933" elapsed="0.119414"/>
</kw>
<msg time="2026-08-15T23:56:59.694431" level="INFO">Repeating keyword, round 872/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.696966" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.696689" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.696645" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.697885" level="INFO">${current_Date} = 2026-08-15 23:56:59.698</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.697510" elapsed="0.000437"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.698782" level="INFO">${ellapsed_seconds} = 2570.639</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.698346" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.699132" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.698896" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.698877" elapsed="0.000334"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.696158" elapsed="0.003105"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.699780" level="INFO">${number} = 872</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.699413" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.701243" level="INFO">${number} = 872</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.700903" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.703239" level="INFO">${device-port} = 18701</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.702453" elapsed="0.000864"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.705758" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.740568" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.740795" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.705637" elapsed="0.035259"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.741768" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:56:59.741937" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.741068" elapsed="0.001099">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.741020" elapsed="0.001244">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.705365" elapsed="0.037171">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.704979" elapsed="0.037777"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.743633" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18701 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.808883" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.809116" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.743146" elapsed="0.066026"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.809287" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:56:59.809698" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.704550" elapsed="0.105297"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.810448" elapsed="0.000903"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.703748" elapsed="0.107792"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.701970" elapsed="0.109760"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.701427" elapsed="0.110450"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.700435" elapsed="0.111575"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.699980" elapsed="0.112128"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.813250" level="INFO">${next} = 18702</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.812454" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.814610" level="INFO">${current_port} = 18702</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.813683" elapsed="0.001022"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.694908" elapsed="0.119989"/>
</kw>
<msg time="2026-08-15T23:56:59.814990" level="INFO">Repeating keyword, round 873/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.817609" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.817350" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.817303" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.818587" level="INFO">${current_Date} = 2026-08-15 23:56:59.818</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.818202" elapsed="0.000451"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.819435" level="INFO">${ellapsed_seconds} = 2570.519</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.819063" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.819773" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.819532" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.819513" elapsed="0.000356"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.816733" elapsed="0.003181"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.820421" level="INFO">${number} = 873</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.820059" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.821873" level="INFO">${number} = 873</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.821517" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.823865" level="INFO">${device-port} = 18702</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.823070" elapsed="0.000876"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.826442" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.864582" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.864842" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.826332" elapsed="0.038574"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.865785" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:56:59.865978" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.865075" elapsed="0.001101">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.865027" elapsed="0.001251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.826051" elapsed="0.040503">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.825622" elapsed="0.041074"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.867568" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18702 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:56:59.933063" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.933302" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.867078" elapsed="0.066283"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:56:59.933478" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:56:59.933972" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.825203" elapsed="0.108888"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:56:59.934698" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.824393" elapsed="0.111498"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.822594" elapsed="0.113502"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.822072" elapsed="0.114143"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.821064" elapsed="0.115289"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.820603" elapsed="0.115851"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.937676" level="INFO">${next} = 18703</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.936878" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.939126" level="INFO">${current_port} = 18703</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:56:59.938179" elapsed="0.001049"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.815432" elapsed="0.123948"/>
</kw>
<msg time="2026-08-15T23:56:59.939472" level="INFO">Repeating keyword, round 874/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:56:59.942193" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:56:59.941925" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.941793" elapsed="0.000551"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.942866" level="INFO">${current_Date} = 2026-08-15 23:56:59.943</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:56:59.942675" elapsed="0.000219"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:56:59.943358" level="INFO">${ellapsed_seconds} = 2570.394</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:56:59.943047" elapsed="0.000338"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.943711" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:56:59.943468" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-15T23:56:59.943448" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:56:59.941270" elapsed="0.002589"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.944379" level="INFO">${number} = 874</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.944008" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.945908" level="INFO">${number} = 874</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.945518" elapsed="0.000418"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:56:59.947959" level="INFO">${device-port} = 18703</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:56:59.947126" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.950964" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:56:59.984743" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:56:59.985028" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.950674" elapsed="0.034417"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:56:59.986126" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:56:59.986287" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:56:59.985319" elapsed="0.001079">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:56:59.985263" elapsed="0.001231">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:56:59.950375" elapsed="0.036395">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:56:59.949786" elapsed="0.037239"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:56:59.987961" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18703 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.053166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.053383" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:56:59.987423" elapsed="0.066016"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.053552" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:57:00.054091" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:56:59.949351" elapsed="0.104860"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.054791" elapsed="0.000927"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:56:59.948498" elapsed="0.107476"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:56:59.946641" elapsed="0.109538"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:56:59.946098" elapsed="0.110187"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.945047" elapsed="0.111364"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:56:59.944574" elapsed="0.111941"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.057785" level="INFO">${next} = 18704</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.056975" elapsed="0.000932"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.059410" level="INFO">${current_port} = 18704</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.058345" elapsed="0.001175"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:56:59.939946" elapsed="0.119727"/>
</kw>
<msg time="2026-08-15T23:57:00.059768" level="INFO">Repeating keyword, round 875/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.062682" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.062546" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.062493" elapsed="0.000256"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.063135" level="INFO">${current_Date} = 2026-08-15 23:57:00.063</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.062940" elapsed="0.000226"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.063642" level="INFO">${ellapsed_seconds} = 2570.274</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.063321" elapsed="0.000361"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.064026" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.063760" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.063739" elapsed="0.000394"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.061917" elapsed="0.002268"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.064724" level="INFO">${number} = 875</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.064337" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.066268" level="INFO">${number} = 875</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.065910" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.068341" level="INFO">${device-port} = 18704</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.067501" elapsed="0.000927"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.071375" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.104725" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.104999" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.071055" elapsed="0.034006"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.106071" elapsed="0.000073"/>
</kw>
<msg time="2026-08-15T23:57:00.106231" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.105237" elapsed="0.001198">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.105186" elapsed="0.001351">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.070725" elapsed="0.036182">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.070268" elapsed="0.036807"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.108005" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18704 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.173267" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.173499" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.107436" elapsed="0.066121"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.173673" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:57:00.174160" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.069826" elapsed="0.104447"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.174881" elapsed="0.000864"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.068942" elapsed="0.107035"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.067019" elapsed="0.109152"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.066465" elapsed="0.109808"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.065422" elapsed="0.110975"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.064945" elapsed="0.111547"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.177644" level="INFO">${next} = 18705</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.176890" elapsed="0.000833"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.179070" level="INFO">${current_port} = 18705</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.178148" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.060363" elapsed="0.118938"/>
</kw>
<msg time="2026-08-15T23:57:00.179386" level="INFO">Repeating keyword, round 876/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.182112" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.181851" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.181775" elapsed="0.000482"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.182796" level="INFO">${current_Date} = 2026-08-15 23:57:00.183</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.182626" elapsed="0.000212"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.183298" level="INFO">${ellapsed_seconds} = 2570.154</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.182991" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.183632" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.183395" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.183376" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.181205" elapsed="0.002552"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.184287" level="INFO">${number} = 876</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.183919" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.185779" level="INFO">${number} = 876</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.185408" elapsed="0.000412"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.187776" level="INFO">${device-port} = 18705</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.187000" elapsed="0.000874"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.190516" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.229183" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.229408" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.190400" elapsed="0.039067"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.230416" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:00.230552" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.229635" elapsed="0.001023">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.229586" elapsed="0.001163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.189952" elapsed="0.041103">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.189519" elapsed="0.041750"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.232140" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18705 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.300965" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.301178" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.231625" elapsed="0.069608"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.301343" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:00.301778" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.189104" elapsed="0.112846"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.302509" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.188311" elapsed="0.115296"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.186518" elapsed="0.117276"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.185990" elapsed="0.117951"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.184954" elapsed="0.119111"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.184482" elapsed="0.119680"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.305334" level="INFO">${next} = 18706</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.304525" elapsed="0.000869"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.306612" level="INFO">${current_port} = 18706</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.305839" elapsed="0.000833"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.179878" elapsed="0.126874"/>
</kw>
<msg time="2026-08-15T23:57:00.306847" level="INFO">Repeating keyword, round 877/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.308407" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.308253" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.308227" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.308939" level="INFO">${current_Date} = 2026-08-15 23:57:00.309</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.308704" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.309626" level="INFO">${ellapsed_seconds} = 2570.028</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.309183" elapsed="0.000481"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.310119" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.309762" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.309736" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.307918" elapsed="0.002374"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.311022" level="INFO">${number} = 877</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.310493" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.313039" level="INFO">${number} = 877</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.312542" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.315849" level="INFO">${device-port} = 18706</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.314712" elapsed="0.001250"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.319383" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.353060" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.353288" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.319285" elapsed="0.034061"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.354350" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:00.354489" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.353517" elapsed="0.001169">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.353466" elapsed="0.001319">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.319000" elapsed="0.036097">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.318334" elapsed="0.036905"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.356095" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18706 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.425153" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.425368" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.355583" elapsed="0.069840"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.425565" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:57:00.426019" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.317713" elapsed="0.108416"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.426680" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.316572" elapsed="0.111165"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.314072" elapsed="0.113891"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.313301" elapsed="0.114763"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.311914" elapsed="0.116272"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.311274" elapsed="0.117005"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.429438" level="INFO">${next} = 18707</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.428622" elapsed="0.000919"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.430730" level="INFO">${current_port} = 18707</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.429959" elapsed="0.000831"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.307125" elapsed="0.123777"/>
</kw>
<msg time="2026-08-15T23:57:00.430956" level="INFO">Repeating keyword, round 878/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.432502" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.432349" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.432322" elapsed="0.000268"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.433079" level="INFO">${current_Date} = 2026-08-15 23:57:00.433</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.432860" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.433771" level="INFO">${ellapsed_seconds} = 2569.904</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.433324" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.434259" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.433928" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.433902" elapsed="0.000467"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.432014" elapsed="0.002418"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.435166" level="INFO">${number} = 878</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.434635" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.437187" level="INFO">${number} = 878</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.436682" elapsed="0.000542"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.439973" level="INFO">${device-port} = 18707</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.438862" elapsed="0.001222"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.443685" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.480783" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.481061" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.443587" elapsed="0.037536"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.482211" elapsed="0.000082"/>
</kw>
<msg time="2026-08-15T23:57:00.482418" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.481359" elapsed="0.001176">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.481287" elapsed="0.001346">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.443310" elapsed="0.039640">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.442429" elapsed="0.040740"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.484156" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18707 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.553224" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.553652" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.483609" elapsed="0.070105"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.553926" elapsed="0.000114"/>
</return>
<msg time="2026-08-15T23:57:00.554477" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.441854" elapsed="0.112738"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.555290" elapsed="0.001014"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.440686" elapsed="0.115813"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.438215" elapsed="0.118481"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.437444" elapsed="0.119398"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.436055" elapsed="0.120928"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.435415" elapsed="0.121671"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.558386" level="INFO">${next} = 18708</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.557515" elapsed="0.000937"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.559357" level="INFO">${current_port} = 18708</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.558760" elapsed="0.000656"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.431218" elapsed="0.128308"/>
</kw>
<msg time="2026-08-15T23:57:00.559584" level="INFO">Repeating keyword, round 879/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.561453" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.561253" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.561223" elapsed="0.000339"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.562049" level="INFO">${current_Date} = 2026-08-15 23:57:00.562</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.561782" elapsed="0.000305"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.562784" level="INFO">${ellapsed_seconds} = 2569.775</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.562297" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.563298" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.562941" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.562915" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.560892" elapsed="0.002582"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.564238" level="INFO">${number} = 879</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.563696" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.566285" level="INFO">${number} = 879</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.565790" elapsed="0.000539"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.569166" level="INFO">${device-port} = 18708</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.568046" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.575174" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.608746" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.609009" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.575070" elapsed="0.034000"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.610159" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:00.610304" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.609239" elapsed="0.001279">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.609190" elapsed="0.001428">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.574766" elapsed="0.036172">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.571429" elapsed="0.039657"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.611943" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18708 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.680742" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.680980" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.611431" elapsed="0.069603"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.681144" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:00.681580" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.571010" elapsed="0.110681"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.682303" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.569990" elapsed="0.113442"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.567370" elapsed="0.116251"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.566587" elapsed="0.117134"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.565145" elapsed="0.118746"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.564491" elapsed="0.119500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.685247" level="INFO">${next} = 18709</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.684334" elapsed="0.000975"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.686642" level="INFO">${current_port} = 18709</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.685724" elapsed="0.001012"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.559965" elapsed="0.126965"/>
</kw>
<msg time="2026-08-15T23:57:00.687019" level="INFO">Repeating keyword, round 880/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.689594" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.689268" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.689226" elapsed="0.000512"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.690532" level="INFO">${current_Date} = 2026-08-15 23:57:00.690</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.690166" elapsed="0.000411"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.691250" level="INFO">${ellapsed_seconds} = 2569.647</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.690790" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.691721" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.691384" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.691359" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.688709" elapsed="0.003209"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.692629" level="INFO">${number} = 880</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.692121" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.694660" level="INFO">${number} = 880</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.694181" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.697457" level="INFO">${device-port} = 18709</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.696332" elapsed="0.001239"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.701383" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.740604" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.740876" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.701206" elapsed="0.039735"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.741888" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:00.742027" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.741110" elapsed="0.001022">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.741061" elapsed="0.001160">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.700488" elapsed="0.042007">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.699943" elapsed="0.042761"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.743621" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18709 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.813509" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.813724" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.743132" elapsed="0.070648"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.813930" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:00.814337" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.699343" elapsed="0.115104"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.815056" elapsed="0.000874"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.698223" elapsed="0.117900"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.695669" elapsed="0.120644"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.694938" elapsed="0.121476"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.693540" elapsed="0.122998"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.692900" elapsed="0.123735"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.817844" level="INFO">${next} = 18710</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.817021" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.819151" level="INFO">${current_port} = 18710</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.818267" elapsed="0.000980"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.687443" elapsed="0.131933"/>
</kw>
<msg time="2026-08-15T23:57:00.819462" level="INFO">Repeating keyword, round 881/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.822132" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.821881" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.821832" elapsed="0.000442"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.822975" level="INFO">${current_Date} = 2026-08-15 23:57:00.823</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.822599" elapsed="0.000437"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.824076" level="INFO">${ellapsed_seconds} = 2569.514</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.823366" elapsed="0.000769"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.824842" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.824291" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.824249" elapsed="0.000776"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.821193" elapsed="0.003934"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.826021" level="INFO">${number} = 881</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.825614" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.827452" level="INFO">${number} = 881</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.827115" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.829467" level="INFO">${device-port} = 18710</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.828627" elapsed="0.000923"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.832217" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:00.868340" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.868596" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.831939" elapsed="0.036723"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.869696" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:57:00.869875" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:00.868890" elapsed="0.001180">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:00.868836" elapsed="0.001341">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.831631" elapsed="0.038841">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.831242" elapsed="0.039386"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.871573" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18710 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:00.970012" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:00.970259" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.871042" elapsed="0.099278"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:00.970446" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:57:00.970939" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.830823" elapsed="0.140240"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:00.971663" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.830013" elapsed="0.142739"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.828164" elapsed="0.144811"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.827635" elapsed="0.145442"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.826653" elapsed="0.146577"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.826205" elapsed="0.147122"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.974548" level="INFO">${next} = 18711</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.973692" elapsed="0.000921"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.976043" level="INFO">${current_port} = 18711</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:00.975042" elapsed="0.001105"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.819939" elapsed="0.156348"/>
</kw>
<msg time="2026-08-15T23:57:00.976378" level="INFO">Repeating keyword, round 882/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:00.978438" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:00.978282" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.978254" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.979031" level="INFO">${current_Date} = 2026-08-15 23:57:00.979</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:00.978785" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:00.979718" level="INFO">${ellapsed_seconds} = 2569.358</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:00.979279" elapsed="0.000476"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:00.980214" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:00.979878" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:00.979851" elapsed="0.000476"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:00.977944" elapsed="0.002447"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.981149" level="INFO">${number} = 882</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.980599" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.983183" level="INFO">${number} = 882</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.982684" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:00.985997" level="INFO">${device-port} = 18711</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:00.984857" elapsed="0.001252"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:00.989647" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.020450" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.020677" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:00.989506" elapsed="0.031230"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.021690" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:01.021857" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.020949" elapsed="0.001019">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.020899" elapsed="0.001164">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:00.989063" elapsed="0.033274">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:00.988427" elapsed="0.034127"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.023425" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18711 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.088486" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.088701" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.022940" elapsed="0.065815"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.088900" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:01.089338" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:00.987849" elapsed="0.101602"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.090092" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:00.986716" elapsed="0.104447"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:00.984202" elapsed="0.107151"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:00.983445" elapsed="0.108011"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.982059" elapsed="0.109521"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:00.981411" elapsed="0.110266"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.092862" level="INFO">${next} = 18712</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.092067" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.094199" level="INFO">${current_port} = 18712</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.093308" elapsed="0.000989"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:00.976881" elapsed="0.117546"/>
</kw>
<msg time="2026-08-15T23:57:01.094513" level="INFO">Repeating keyword, round 883/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.097109" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.096785" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.096742" elapsed="0.000518"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.097785" level="INFO">${current_Date} = 2026-08-15 23:57:01.098</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.097607" elapsed="0.000220"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.098290" level="INFO">${ellapsed_seconds} = 2569.239</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.097979" elapsed="0.000338"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.098624" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.098388" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.098369" elapsed="0.000336"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.096250" elapsed="0.002501"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.099279" level="INFO">${number} = 883</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.098914" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.100721" level="INFO">${number} = 883</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.100374" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.102719" level="INFO">${device-port} = 18712</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.101943" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.105295" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.144069" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.144296" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.105189" elapsed="0.039167"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.145314" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:01.145450" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.144527" elapsed="0.001112">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.144477" elapsed="0.001262">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.104893" elapsed="0.041155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.104477" elapsed="0.041715"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.147062" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18712 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.216480" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.216692" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.146544" elapsed="0.070203"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.216903" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:57:01.217332" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.104062" elapsed="0.113379"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.218035" elapsed="0.000870"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.103255" elapsed="0.115844"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.101473" elapsed="0.117815"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.100925" elapsed="0.118463"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.099926" elapsed="0.119587"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.099461" elapsed="0.120148"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.220751" level="INFO">${next} = 18713</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.220000" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.222133" level="INFO">${current_port} = 18713</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.221243" elapsed="0.000988"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.094992" elapsed="0.127369"/>
</kw>
<msg time="2026-08-15T23:57:01.222446" level="INFO">Repeating keyword, round 884/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.225046" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.224724" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.224681" elapsed="0.000514"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.225830" level="INFO">${current_Date} = 2026-08-15 23:57:01.226</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.225642" elapsed="0.000217"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.226315" level="INFO">${ellapsed_seconds} = 2569.111</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.226010" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.226655" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.226412" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.226394" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.224193" elapsed="0.002588"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.227309" level="INFO">${number} = 884</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.226944" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.228780" level="INFO">${number} = 884</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.228402" elapsed="0.000422"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.230816" level="INFO">${device-port} = 18713</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.230015" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.233419" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.268483" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.268713" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.233315" elapsed="0.035456"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.269724" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:01.269892" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.269008" elapsed="0.000993">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.268956" elapsed="0.001139">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.233038" elapsed="0.037332">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.232610" elapsed="0.037994"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.271612" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18713 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.337480" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.337727" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.271022" elapsed="0.066766"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.337963" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:57:01.338416" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.232192" elapsed="0.106343"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.339188" elapsed="0.000974"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.231351" elapsed="0.109015"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.229539" elapsed="0.111034"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.229000" elapsed="0.111686"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.227957" elapsed="0.112937"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.227491" elapsed="0.113521"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.342273" level="INFO">${next} = 18714</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.341394" elapsed="0.000945"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.343735" level="INFO">${current_port} = 18714</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.342747" elapsed="0.001154"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.222924" elapsed="0.121123"/>
</kw>
<msg time="2026-08-15T23:57:01.344143" level="INFO">Repeating keyword, round 885/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.346936" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.346637" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.346591" elapsed="0.000501"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.347845" level="INFO">${current_Date} = 2026-08-15 23:57:01.348</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.347443" elapsed="0.000471"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.349128" level="INFO">${ellapsed_seconds} = 2568.989</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.348277" elapsed="0.000916"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.349780" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.349364" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.349319" elapsed="0.000557"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.346056" elapsed="0.003866"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.350437" level="INFO">${number} = 885</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.350069" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.351904" level="INFO">${number} = 885</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.351547" elapsed="0.000385"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.353933" level="INFO">${device-port} = 18714</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.353120" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.356509" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.389535" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.389708" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.356403" elapsed="0.033343"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.390389" elapsed="0.000037"/>
</kw>
<msg time="2026-08-15T23:57:01.390475" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.389897" elapsed="0.000716">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.389859" elapsed="0.000820">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.356121" elapsed="0.034867">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.355702" elapsed="0.035384"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.391636" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18714 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.460637" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.460910" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.391317" elapsed="0.069652"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.461084" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:57:01.461501" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.355286" elapsed="0.106327"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.462227" elapsed="0.000939"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.354462" elapsed="0.108896"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.352612" elapsed="0.110938"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.352091" elapsed="0.111561"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.351089" elapsed="0.112689"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.350620" elapsed="0.113305"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.465106" level="INFO">${next} = 18715</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.464275" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.466449" level="INFO">${current_port} = 18715</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.465537" elapsed="0.001008"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.344611" elapsed="0.122067"/>
</kw>
<msg time="2026-08-15T23:57:01.466766" level="INFO">Repeating keyword, round 886/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.469411" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.469167" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.469123" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.470091" level="INFO">${current_Date} = 2026-08-15 23:57:01.470</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.469856" elapsed="0.000272"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.470791" level="INFO">${ellapsed_seconds} = 2568.867</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.470338" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.471297" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.470950" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.470924" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.468551" elapsed="0.002920"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.472227" level="INFO">${number} = 886</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.471679" elapsed="0.000586"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.474269" level="INFO">${number} = 886</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.473769" elapsed="0.000537"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.477101" level="INFO">${device-port} = 18715</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.475959" elapsed="0.001254"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.481009" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.513327" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.513568" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.480554" elapsed="0.033074"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.514569" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:57:01.514727" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.513834" elapsed="0.001036">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.513751" elapsed="0.001217">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.480164" elapsed="0.035082">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.479561" elapsed="0.035903"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.516363" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18715 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.584926" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.585154" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.515854" elapsed="0.069359"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.585329" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:57:01.585749" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.478991" elapsed="0.106911"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.586474" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.477858" elapsed="0.109714"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.475307" elapsed="0.112456"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.474536" elapsed="0.113374"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.473148" elapsed="0.114888"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.472483" elapsed="0.115651"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.589306" level="INFO">${next} = 18716</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.588481" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.590641" level="INFO">${current_port} = 18716</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.589740" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.467257" elapsed="0.123678"/>
</kw>
<msg time="2026-08-15T23:57:01.591024" level="INFO">Repeating keyword, round 887/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.593537" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.593292" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.593248" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.594383" level="INFO">${current_Date} = 2026-08-15 23:57:01.594</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.594035" elapsed="0.000419"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.595497" level="INFO">${ellapsed_seconds} = 2568.743</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.594784" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.596269" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.595711" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.595669" elapsed="0.000776"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.592726" elapsed="0.003819"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.597730" level="INFO">${number} = 887</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.596956" elapsed="0.000801"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.599172" level="INFO">${number} = 887</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.598832" elapsed="0.000366"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.601222" level="INFO">${device-port} = 18716</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.600361" elapsed="0.000942"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.603932" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.636324" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.636575" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.603654" elapsed="0.032987"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.637600" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:01.637733" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.636884" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.636796" elapsed="0.001261">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.603381" elapsed="0.034952">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.602986" elapsed="0.035488"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.639351" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18716 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.704758" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.705051" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.638861" elapsed="0.066248"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.705235" elapsed="0.000088"/>
</return>
<msg time="2026-08-15T23:57:01.705684" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.602545" elapsed="0.103251"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.706438" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.601743" elapsed="0.105839"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.599911" elapsed="0.107859"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.599355" elapsed="0.108567"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.598376" elapsed="0.109685"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.597928" elapsed="0.110232"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.709354" level="INFO">${next} = 18717</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.708509" elapsed="0.000904"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.710682" level="INFO">${current_port} = 18717</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.709776" elapsed="0.001000"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.591447" elapsed="0.119528"/>
</kw>
<msg time="2026-08-15T23:57:01.711063" level="INFO">Repeating keyword, round 888/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.713695" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.713451" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.713406" elapsed="0.000368"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.714151" level="INFO">${current_Date} = 2026-08-15 23:57:01.714</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.713980" elapsed="0.000197"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.714664" level="INFO">${ellapsed_seconds} = 2568.623</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.714327" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.715032" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.714761" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.714742" elapsed="0.000369"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.712908" elapsed="0.002248"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.715669" level="INFO">${number} = 888</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.715300" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.717143" level="INFO">${number} = 888</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.716777" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.719149" level="INFO">${device-port} = 18717</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.718337" elapsed="0.000896"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.721889" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.752438" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.752682" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.721762" elapsed="0.030979"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.753673" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:01.753837" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.752948" elapsed="0.001001">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.752900" elapsed="0.001142">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.721331" elapsed="0.032995">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.720932" elapsed="0.033602"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.755413" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18717 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.820768" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.821014" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.754916" elapsed="0.066152"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.821177" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:01.821572" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.720486" elapsed="0.101198"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.822284" elapsed="0.000896"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.719673" elapsed="0.103697"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.717890" elapsed="0.105679"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.717329" elapsed="0.106341"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.716313" elapsed="0.107481"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.715866" elapsed="0.108072"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.825118" level="INFO">${next} = 18718</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.824291" elapsed="0.000888"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.826433" level="INFO">${current_port} = 18718</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.825539" elapsed="0.000990"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.711520" elapsed="0.115136"/>
</kw>
<msg time="2026-08-15T23:57:01.826743" level="INFO">Repeating keyword, round 889/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.829412" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.829167" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.829114" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.829964" level="INFO">${current_Date} = 2026-08-15 23:57:01.830</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.829787" elapsed="0.000212"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.830491" level="INFO">${ellapsed_seconds} = 2568.507</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.830179" elapsed="0.000338"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.830841" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.830588" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.830569" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.828570" elapsed="0.002396"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.831482" level="INFO">${number} = 889</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.831111" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.832977" level="INFO">${number} = 889</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.832616" elapsed="0.000388"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.834990" level="INFO">${device-port} = 18718</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.834166" elapsed="0.000906"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.837840" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.876480" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.876736" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.837720" elapsed="0.039110"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.877728" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:01.877897" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.877012" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.876963" elapsed="0.001240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.837440" elapsed="0.041047">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.836859" elapsed="0.041770"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.879495" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18718 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:01.944999" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.945216" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.879008" elapsed="0.066263"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:01.945384" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:01.945839" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.836368" elapsed="0.109591"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:01.946559" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.835515" elapsed="0.112139"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.833694" elapsed="0.114193"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.833168" elapsed="0.114823"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.832136" elapsed="0.115980"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.831674" elapsed="0.116537"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.949416" level="INFO">${next} = 18719</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.948603" elapsed="0.000874"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.950741" level="INFO">${current_port} = 18719</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:01.949875" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.827250" elapsed="0.123788"/>
</kw>
<msg time="2026-08-15T23:57:01.951123" level="INFO">Repeating keyword, round 890/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:01.953649" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:01.953407" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.953364" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.954568" level="INFO">${current_Date} = 2026-08-15 23:57:01.954</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:01.954219" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:01.955678" level="INFO">${ellapsed_seconds} = 2568.383</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:01.954992" elapsed="0.000745"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.956478" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:01.955928" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:01.955885" elapsed="0.000780"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:01.952874" elapsed="0.003892"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.957977" level="INFO">${number} = 890</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.957128" elapsed="0.000909"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.961399" level="INFO">${number} = 890</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.960572" elapsed="0.000887"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:01.963714" level="INFO">${device-port} = 18719</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:01.962767" elapsed="0.001029"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:01.966541" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:01.997118" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:01.997338" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.966442" elapsed="0.030954"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:01.998308" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:01.998443" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:01.997562" elapsed="0.000984">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:01.997516" elapsed="0.001120">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:01.966119" elapsed="0.032822">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:01.965528" elapsed="0.033622"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.000008" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18719 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.064953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.065163" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:01.999497" elapsed="0.065720"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.065326" elapsed="0.000070"/>
</return>
<msg time="2026-08-15T23:57:02.065721" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:01.965108" elapsed="0.100766"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.066438" elapsed="0.000876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:01.964263" elapsed="0.103238"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:01.962308" elapsed="0.105380"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:01.961766" elapsed="0.106021"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.959497" elapsed="0.108457"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:01.958437" elapsed="0.109615"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.069197" level="INFO">${next} = 18720</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.068412" elapsed="0.000844"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.070531" level="INFO">${current_port} = 18720</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.069629" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:01.951547" elapsed="0.119205"/>
</kw>
<msg time="2026-08-15T23:57:02.070907" level="INFO">Repeating keyword, round 891/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.073520" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.073276" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.073232" elapsed="0.000450"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.074393" level="INFO">${current_Date} = 2026-08-15 23:57:02.074</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.074051" elapsed="0.000400"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.075487" level="INFO">${ellapsed_seconds} = 2568.263</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.074780" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.076272" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.075715" elapsed="0.000756"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.075661" elapsed="0.000866"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.072692" elapsed="0.003939"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.077762" level="INFO">${number} = 891</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.077003" elapsed="0.000809"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.079236" level="INFO">${number} = 891</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.078876" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.081290" level="INFO">${device-port} = 18720</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.080492" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.086561" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.116943" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.117183" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.086462" elapsed="0.030782"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.118191" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:02.118328" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.117419" elapsed="0.001102">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.117370" elapsed="0.001250">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.086172" elapsed="0.032759">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.083105" elapsed="0.035972"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.119946" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18720 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.185165" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.185391" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.119427" elapsed="0.066021"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.185561" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:57:02.186015" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.082665" elapsed="0.103464"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.186698" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.081860" elapsed="0.105980"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.079999" elapsed="0.108042"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.079431" elapsed="0.108712"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.078413" elapsed="0.109856"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.077971" elapsed="0.110428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.189551" level="INFO">${next} = 18721</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.188744" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.190935" level="INFO">${current_port} = 18721</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.190031" elapsed="0.001001"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.071330" elapsed="0.119830"/>
</kw>
<msg time="2026-08-15T23:57:02.191244" level="INFO">Repeating keyword, round 892/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.193377" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.193224" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.193198" elapsed="0.000268"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.193954" level="INFO">${current_Date} = 2026-08-15 23:57:02.194</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.193715" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.194626" level="INFO">${ellapsed_seconds} = 2568.143</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.194197" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.195114" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.194760" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.194734" elapsed="0.000490"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.192895" elapsed="0.002391"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.196015" level="INFO">${number} = 892</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.195486" elapsed="0.000565"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.198032" level="INFO">${number} = 892</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.197542" elapsed="0.000527"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.200827" level="INFO">${device-port} = 18721</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.199667" elapsed="0.001278"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.204712" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.236863" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.237085" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.204564" elapsed="0.032579"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.238066" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:02.238204" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.237311" elapsed="0.000998">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.237262" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.203895" elapsed="0.034774">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.203271" elapsed="0.035638"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.239742" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18721 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.305018" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.305230" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.239260" elapsed="0.066026"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.305395" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:02.305793" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.202670" elapsed="0.103280"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.306501" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.201559" elapsed="0.106006"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.199042" elapsed="0.108708"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.198288" elapsed="0.109603"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.196926" elapsed="0.111093"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.196266" elapsed="0.111849"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.309258" level="INFO">${next} = 18722</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.308479" elapsed="0.000837"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.310561" level="INFO">${current_port} = 18722</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.309669" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.191665" elapsed="0.119116"/>
</kw>
<msg time="2026-08-15T23:57:02.310934" level="INFO">Repeating keyword, round 893/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.313475" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.313235" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.313193" elapsed="0.000423"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.314310" level="INFO">${current_Date} = 2026-08-15 23:57:02.314</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.313971" elapsed="0.000397"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.315401" level="INFO">${ellapsed_seconds} = 2568.023</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.314696" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.316172" elapsed="0.000119"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.315616" elapsed="0.000754"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.315574" elapsed="0.000852"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.312675" elapsed="0.003855"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.317497" level="INFO">${number} = 893</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.316891" elapsed="0.000633"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.318934" level="INFO">${number} = 893</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.318581" elapsed="0.000380"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.320917" level="INFO">${device-port} = 18722</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.320106" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.323619" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.356757" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.357021" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.323353" elapsed="0.033729"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.357987" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:02.358123" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.357251" elapsed="0.001068">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.357203" elapsed="0.001215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.323075" elapsed="0.035619">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.322663" elapsed="0.036203"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.359701" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18722 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.424774" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.425021" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.359216" elapsed="0.065859"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.425185" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:02.425586" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.322243" elapsed="0.103454"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.426301" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.321437" elapsed="0.105934"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.319637" elapsed="0.107922"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.319120" elapsed="0.108540"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.318138" elapsed="0.109646"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.317678" elapsed="0.110254"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.429093" level="INFO">${next} = 18723</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.428303" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.430400" level="INFO">${current_port} = 18723</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.429512" elapsed="0.000983"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.311379" elapsed="0.119243"/>
</kw>
<msg time="2026-08-15T23:57:02.430707" level="INFO">Repeating keyword, round 894/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.433389" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.433146" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.433104" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.434306" level="INFO">${current_Date} = 2026-08-15 23:57:02.434</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.433958" elapsed="0.000406"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.435406" level="INFO">${ellapsed_seconds} = 2567.903</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.434696" elapsed="0.000769"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.436221" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.435622" elapsed="0.000726"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.435582" elapsed="0.000818"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.432550" elapsed="0.003953"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.437154" level="INFO">${number} = 894</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.436772" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.438578" level="INFO">${number} = 894</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.438241" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.440585" level="INFO">${device-port} = 18723</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.439750" elapsed="0.000915"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.443154" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.480719" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.480982" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.443056" elapsed="0.037986"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.481956" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:02.482094" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.481213" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.481165" elapsed="0.001131">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.442744" elapsed="0.039827">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.442348" elapsed="0.040438"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.483664" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18723 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.548598" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.548844" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.483181" elapsed="0.065722"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.549016" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:57:02.549424" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.441930" elapsed="0.107603"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.550132" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.441123" elapsed="0.110101"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.439299" elapsed="0.112185"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.438764" elapsed="0.112840"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.437781" elapsed="0.113968"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.437337" elapsed="0.114565"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.553324" level="INFO">${next} = 18724</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.552283" elapsed="0.001109"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.554691" level="INFO">${current_port} = 18724</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.553771" elapsed="0.001015"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.431186" elapsed="0.123794"/>
</kw>
<msg time="2026-08-15T23:57:02.555068" level="INFO">Repeating keyword, round 895/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.557652" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.557402" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.557357" elapsed="0.000473"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.558514" level="INFO">${current_Date} = 2026-08-15 23:57:02.558</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.558164" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.559635" level="INFO">${ellapsed_seconds} = 2567.779</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.558940" elapsed="0.000754"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.560470" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.559883" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.559839" elapsed="0.000862"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.556863" elapsed="0.003899"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.561308" level="INFO">${number} = 895</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.560936" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.562832" level="INFO">${number} = 895</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.562419" elapsed="0.000441"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.564904" level="INFO">${device-port} = 18724</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.564055" elapsed="0.000929"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.567546" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.600437" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.600591" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.567444" elapsed="0.033209"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.601593" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:02.601726" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.600877" elapsed="0.001074">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.600792" elapsed="0.001261">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.567145" elapsed="0.035185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.566698" elapsed="0.035774"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.603339" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18724 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.668862" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.669115" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.602851" elapsed="0.066321"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.669298" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:57:02.669754" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.566243" elapsed="0.103683"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.670535" elapsed="0.000995"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.565429" elapsed="0.106303"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.563563" elapsed="0.108480"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.563028" elapsed="0.109128"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.561968" elapsed="0.110320"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.561491" elapsed="0.110894"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.673590" level="INFO">${next} = 18725</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.672739" elapsed="0.000911"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.675057" level="INFO">${current_port} = 18725</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.674084" elapsed="0.001080"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.555522" elapsed="0.119774"/>
</kw>
<msg time="2026-08-15T23:57:02.675383" level="INFO">Repeating keyword, round 896/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.678269" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.677895" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.677845" elapsed="0.000580"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.678983" level="INFO">${current_Date} = 2026-08-15 23:57:02.679</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.678791" elapsed="0.000220"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.679517" level="INFO">${ellapsed_seconds} = 2567.658</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.679174" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.679893" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.679621" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.679601" elapsed="0.000394"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.677306" elapsed="0.002737"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.680577" level="INFO">${number} = 896</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.680201" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.682086" level="INFO">${number} = 896</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.681712" elapsed="0.000401"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.684171" level="INFO">${device-port} = 18725</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.683339" elapsed="0.000932"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.686911" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.720538" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.720743" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.686778" elapsed="0.034080"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.721778" elapsed="0.000095"/>
</kw>
<msg time="2026-08-15T23:57:02.721958" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.721034" elapsed="0.001034">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.720985" elapsed="0.001175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.686480" elapsed="0.035962">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.686073" elapsed="0.036605"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.723579" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18725 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.789026" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.789257" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.723071" elapsed="0.066242"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.789429" elapsed="0.000080"/>
</return>
<msg time="2026-08-15T23:57:02.789901" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.685631" elapsed="0.104386"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.790587" elapsed="0.000929"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.684758" elapsed="0.106949"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.682858" elapsed="0.109127"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.682284" elapsed="0.109808"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.681255" elapsed="0.110965"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.680761" elapsed="0.111558"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.793466" level="INFO">${next} = 18726</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.792667" elapsed="0.000858"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.794861" level="INFO">${current_port} = 18726</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.793936" elapsed="0.001026"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.675883" elapsed="0.119209"/>
</kw>
<msg time="2026-08-15T23:57:02.795179" level="INFO">Repeating keyword, round 897/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.797750" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.797508" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.797463" elapsed="0.000464"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.798618" level="INFO">${current_Date} = 2026-08-15 23:57:02.798</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.798268" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.799741" level="INFO">${ellapsed_seconds} = 2567.539</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.799043" elapsed="0.000786"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.800581" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.800043" elapsed="0.000669"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.799998" elapsed="0.000745"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.796969" elapsed="0.003844"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.801326" level="INFO">${number} = 897</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.800961" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.802765" level="INFO">${number} = 897</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.802418" elapsed="0.000374"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.804771" level="INFO">${device-port} = 18726</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.803989" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.807352" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.845083" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.845310" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.807246" elapsed="0.038124"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.846302" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:02.846436" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.845537" elapsed="0.001100">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.845490" elapsed="0.001247">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.806961" elapsed="0.040089">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.806538" elapsed="0.040693"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.848156" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18726 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:02.913245" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.913477" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.847608" elapsed="0.065928"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:02.913655" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:02.914126" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.806111" elapsed="0.108131"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:02.914880" elapsed="0.000972"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.805307" elapsed="0.110761"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.803502" elapsed="0.112764"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.802978" elapsed="0.113395"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.801971" elapsed="0.114533"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.801509" elapsed="0.115096"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.917874" level="INFO">${next} = 18727</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.917017" elapsed="0.000928"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.919292" level="INFO">${current_port} = 18727</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:02.918335" elapsed="0.001060"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.795615" elapsed="0.123917"/>
</kw>
<msg time="2026-08-15T23:57:02.919624" level="INFO">Repeating keyword, round 898/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:02.922308" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:02.922063" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.922019" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.923250" level="INFO">${current_Date} = 2026-08-15 23:57:02.923</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:02.922889" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:02.924417" level="INFO">${ellapsed_seconds} = 2567.414</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:02.923643" elapsed="0.000834"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.924973" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:02.924648" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:02.924600" elapsed="0.000455"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:02.921495" elapsed="0.003606"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.925617" level="INFO">${number} = 898</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.925247" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.927085" level="INFO">${number} = 898</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.926718" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:02.929162" level="INFO">${device-port} = 18727</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:02.928314" elapsed="0.000932"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.931968" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:02.965182" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:02.965418" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.931654" elapsed="0.033824"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:02.966525" elapsed="0.000077"/>
</kw>
<msg time="2026-08-15T23:57:02.966688" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:02.965652" elapsed="0.001145">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:02.965600" elapsed="0.001354">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:02.931376" elapsed="0.035866">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:02.930978" elapsed="0.036482"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:02.968380" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18727 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.033097" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.033432" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:02.967882" elapsed="0.065609"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.033641" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:57:03.034216" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:02.930529" elapsed="0.103797"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.035016" elapsed="0.001047"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:02.929688" elapsed="0.106570"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:02.927827" elapsed="0.108627"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:02.927270" elapsed="0.109286"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.926269" elapsed="0.110416"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:02.925814" elapsed="0.110971"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.038052" level="INFO">${next} = 18728</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.037205" elapsed="0.000908"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.039451" level="INFO">${current_port} = 18728</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.038496" elapsed="0.001051"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:02.920147" elapsed="0.119530"/>
</kw>
<msg time="2026-08-15T23:57:03.039795" level="INFO">Repeating keyword, round 899/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.042486" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.042237" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.042192" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.043335" level="INFO">${current_Date} = 2026-08-15 23:57:03.043</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.042981" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.044513" level="INFO">${ellapsed_seconds} = 2567.294</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.043779" elapsed="0.000792"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.044937" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.044661" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.044642" elapsed="0.000374"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.041664" elapsed="0.003397"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.045574" level="INFO">${number} = 899</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.045208" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.047046" level="INFO">${number} = 899</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.046680" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.049129" level="INFO">${device-port} = 18728</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.048294" elapsed="0.000918"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.052011" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.085036" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.085293" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.051668" elapsed="0.033685"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.086374" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:03.086512" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.085545" elapsed="0.001192">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.085486" elapsed="0.001380">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.051376" elapsed="0.035786">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.050975" elapsed="0.036328"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.088232" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18728 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.156798" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.157176" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.087660" elapsed="0.069573"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.157383" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:57:03.157943" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.050523" elapsed="0.107541"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.158688" elapsed="0.001057"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.049674" elapsed="0.110328"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.047793" elapsed="0.112408"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.047230" elapsed="0.113075"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.046226" elapsed="0.114206"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.045756" elapsed="0.114772"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.161697" level="INFO">${next} = 18729</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.160930" elapsed="0.000826"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.163136" level="INFO">${current_port} = 18729</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.162182" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.040359" elapsed="0.123010"/>
</kw>
<msg time="2026-08-15T23:57:03.163456" level="INFO">Repeating keyword, round 900/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.166220" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.165963" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.165918" elapsed="0.000447"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.167190" level="INFO">${current_Date} = 2026-08-15 23:57:03.167</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.166789" elapsed="0.000461"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.168570" level="INFO">${ellapsed_seconds} = 2567.17</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.167582" elapsed="0.001045"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.168982" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.168698" elapsed="0.000354"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.168680" elapsed="0.000403"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.165371" elapsed="0.003762"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.169661" level="INFO">${number} = 900</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.169283" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.171164" level="INFO">${number} = 900</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.170796" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.173252" level="INFO">${device-port} = 18729</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.172420" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.176432" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.208545" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.208888" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.176325" elapsed="0.032627"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.210043" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:57:03.210187" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.209184" elapsed="0.001115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.209117" elapsed="0.001276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.175847" elapsed="0.034840">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.175330" elapsed="0.035637"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.211911" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18729 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.276877" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.277159" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.211343" elapsed="0.065871"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.277354" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:57:03.277864" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.174739" elapsed="0.103239"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.278582" elapsed="0.000941"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.173793" elapsed="0.105951"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.171958" elapsed="0.108022"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.171357" elapsed="0.108726"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.170332" elapsed="0.109877"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.169870" elapsed="0.110438"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.281482" level="INFO">${next} = 18730</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.280661" elapsed="0.000879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.283009" level="INFO">${current_port} = 18730</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.282048" elapsed="0.001058"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.164013" elapsed="0.119233"/>
</kw>
<msg time="2026-08-15T23:57:03.283336" level="INFO">Repeating keyword, round 901/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.285566" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.285396" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.285366" elapsed="0.000297"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.286153" level="INFO">${current_Date} = 2026-08-15 23:57:03.286</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.285906" elapsed="0.000287"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.286933" level="INFO">${ellapsed_seconds} = 2567.051</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.286415" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.287441" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.287073" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.287046" elapsed="0.000527"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.285030" elapsed="0.002617"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.288432" level="INFO">${number} = 901</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.287894" elapsed="0.000577"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.290585" level="INFO">${number} = 901</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.290075" elapsed="0.000550"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.293556" level="INFO">${device-port} = 18730</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.292374" elapsed="0.001302"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.297432" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.329355" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.329673" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.297328" elapsed="0.032410"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.330893" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:57:03.331043" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.330003" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.329936" elapsed="0.001446">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.297046" elapsed="0.034682">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.296251" elapsed="0.035663"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.332881" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18730 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.401104" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.401325" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.332312" elapsed="0.069069"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.401497" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:57:03.401987" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.295585" elapsed="0.106516"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.402673" elapsed="0.000963"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.294360" elapsed="0.109509"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.291678" elapsed="0.112393"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.290878" elapsed="0.113297"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.289380" elapsed="0.114923"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.288698" elapsed="0.115701"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.405549" level="INFO">${next} = 18731</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.404746" elapsed="0.000862"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.406938" level="INFO">${current_port} = 18731</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.406010" elapsed="0.001024"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.283922" elapsed="0.123239"/>
</kw>
<msg time="2026-08-15T23:57:03.407246" level="INFO">Repeating keyword, round 902/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.409892" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.409610" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.409567" elapsed="0.000470"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.410848" level="INFO">${current_Date} = 2026-08-15 23:57:03.411</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.410445" elapsed="0.000466"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.412027" level="INFO">${ellapsed_seconds} = 2566.926</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.411247" elapsed="0.000839"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.412778" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.412244" elapsed="0.000619"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.412203" elapsed="0.000684"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.409075" elapsed="0.003857"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.413443" level="INFO">${number} = 902</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.413079" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.414890" level="INFO">${number} = 902</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.414527" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.417071" level="INFO">${device-port} = 18731</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.416092" elapsed="0.001061"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.419834" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.483326" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.483579" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.419713" elapsed="0.063926"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.484559" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:03.484693" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.483845" elapsed="0.000985">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.483758" elapsed="0.001169">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.419417" elapsed="0.065787">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.418845" elapsed="0.066567"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.486274" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18731 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.556725" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.556977" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.485760" elapsed="0.071272"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.557144" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:03.557544" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.418409" elapsed="0.139243"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.558250" elapsed="0.000872"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.417598" elapsed="0.141710"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.415622" elapsed="0.143908"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.415080" elapsed="0.144553"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.414086" elapsed="0.145671"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.413624" elapsed="0.146276"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.561029" level="INFO">${next} = 18732</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.560244" elapsed="0.000843"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.562344" level="INFO">${current_port} = 18732</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.561453" elapsed="0.000986"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.407721" elapsed="0.154846"/>
</kw>
<msg time="2026-08-15T23:57:03.562652" level="INFO">Repeating keyword, round 903/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.565245" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.565005" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.564963" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.566091" level="INFO">${current_Date} = 2026-08-15 23:57:03.566</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.565717" elapsed="0.000433"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.567185" level="INFO">${ellapsed_seconds} = 2566.771</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.566478" elapsed="0.000765"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.568007" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.567449" elapsed="0.000691"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.567403" elapsed="0.000798"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.564445" elapsed="0.003873"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.568873" level="INFO">${number} = 903</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.568491" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.570308" level="INFO">${number} = 903</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.569970" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.572295" level="INFO">${device-port} = 18732</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.571501" elapsed="0.000875"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.577434" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.608388" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.608611" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.577335" elapsed="0.031334"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.609588" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:03.609720" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.608874" elapsed="0.001071">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.608788" elapsed="0.001259">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.577045" elapsed="0.033273">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.574045" elapsed="0.036413"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.611311" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18732 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.681235" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.681466" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.610829" elapsed="0.070694"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.681640" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:03.682100" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.573617" elapsed="0.108597"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.682782" elapsed="0.000957"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.572838" elapsed="0.111132"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.571040" elapsed="0.113119"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.570501" elapsed="0.113759"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.569504" elapsed="0.114878"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.569054" elapsed="0.115422"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.685632" level="INFO">${next} = 18733</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.684864" elapsed="0.000829"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.687009" level="INFO">${current_port} = 18733</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.686109" elapsed="0.000997"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.563141" elapsed="0.124092"/>
</kw>
<msg time="2026-08-15T23:57:03.687369" level="INFO">Repeating keyword, round 904/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.689123" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.688967" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.688940" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.689732" level="INFO">${current_Date} = 2026-08-15 23:57:03.690</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.689509" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.690436" level="INFO">${ellapsed_seconds} = 2566.647</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.690002" elapsed="0.000470"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.690929" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.690572" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.690545" elapsed="0.000497"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.688613" elapsed="0.002491"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.691881" level="INFO">${number} = 904</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.691346" elapsed="0.000572"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.693881" level="INFO">${number} = 904</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.693388" elapsed="0.000530"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.696653" level="INFO">${device-port} = 18733</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.695537" elapsed="0.001229"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.700321" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.736735" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.736990" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.700222" elapsed="0.036828"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.737955" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:03.738091" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.737220" elapsed="0.000978">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.737171" elapsed="0.001118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.699695" elapsed="0.038861">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.699142" elapsed="0.039625"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.739669" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18733 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.804925" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.805141" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.739154" elapsed="0.066042"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.805308" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:03.805703" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.698533" elapsed="0.107320"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.806413" elapsed="0.000905"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.697412" elapsed="0.110097"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.694893" elapsed="0.112804"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.694138" elapsed="0.113700"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.692752" elapsed="0.115221"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.692134" elapsed="0.115938"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.809200" level="INFO">${next} = 18734</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.808417" elapsed="0.000843"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.810503" level="INFO">${current_port} = 18734</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.809617" elapsed="0.000981"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.687832" elapsed="0.122892"/>
</kw>
<msg time="2026-08-15T23:57:03.810870" level="INFO">Repeating keyword, round 905/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.813359" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.813117" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.813074" elapsed="0.000428"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.814196" level="INFO">${current_Date} = 2026-08-15 23:57:03.814</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.813854" elapsed="0.000401"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.815352" level="INFO">${ellapsed_seconds} = 2566.523</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.814583" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.815954" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.815571" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.815529" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.812558" elapsed="0.003522"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.816589" level="INFO">${number} = 905</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.816225" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.818052" level="INFO">${number} = 905</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.817695" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.820023" level="INFO">${device-port} = 18734</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.819231" elapsed="0.000872"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.822691" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.856406" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.856631" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.822420" elapsed="0.034269"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.857600" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:03.857732" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.856898" elapsed="0.001049">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.856848" elapsed="0.001200">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.822146" elapsed="0.036175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.821734" elapsed="0.036728"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.859352" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18734 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:03.925039" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.925254" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.858835" elapsed="0.066472"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:03.925420" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:03.925864" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.821325" elapsed="0.104656"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:03.926540" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.820537" elapsed="0.107112"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.818754" elapsed="0.109129"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.818235" elapsed="0.109754"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.817245" elapsed="0.110870"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.816770" elapsed="0.111439"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.929333" level="INFO">${next} = 18735</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.928551" elapsed="0.000841"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.930629" level="INFO">${current_port} = 18735</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:03.929749" elapsed="0.000974"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.811311" elapsed="0.119608"/>
</kw>
<msg time="2026-08-15T23:57:03.931008" level="INFO">Repeating keyword, round 906/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:03.932869" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:03.932692" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.932666" elapsed="0.000293"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.933419" level="INFO">${current_Date} = 2026-08-15 23:57:03.933</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:03.933204" elapsed="0.000252"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:03.934109" level="INFO">${ellapsed_seconds} = 2566.404</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:03.933663" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.934573" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:03.934246" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:03.934220" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:03.932362" elapsed="0.002384"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.935499" level="INFO">${number} = 906</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.934973" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.937512" level="INFO">${number} = 906</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.937040" elapsed="0.000510"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:03.940290" level="INFO">${device-port} = 18735</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:03.939189" elapsed="0.001212"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.943941" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:03.976441" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:03.976672" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.943746" elapsed="0.032985"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:03.977651" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:03.977785" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:03.976944" elapsed="0.000981">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:03.976894" elapsed="0.001126">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:03.943338" elapsed="0.034950">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:03.942721" elapsed="0.035791"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:03.979413" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18735 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.045008" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.045223" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:03.978896" elapsed="0.066382"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.045392" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:04.045797" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:03.942148" elapsed="0.103808"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.046515" elapsed="0.000910"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:03.941038" elapsed="0.106578"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:03.938518" elapsed="0.109328"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:03.937774" elapsed="0.110181"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.936399" elapsed="0.111682"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:03.935757" elapsed="0.112423"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.049315" level="INFO">${next} = 18736</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.048528" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.050627" level="INFO">${current_port} = 18736</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.049739" elapsed="0.000983"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:03.931478" elapsed="0.119440"/>
</kw>
<msg time="2026-08-15T23:57:04.051011" level="INFO">Repeating keyword, round 907/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.053525" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.053281" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.053237" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.054368" level="INFO">${current_Date} = 2026-08-15 23:57:04.054</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.054023" elapsed="0.000406"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.055527" level="INFO">${ellapsed_seconds} = 2566.283</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.054757" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.055943" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.055692" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.055673" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.052717" elapsed="0.003353"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.056582" level="INFO">${number} = 907</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.056217" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.058032" level="INFO">${number} = 907</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.057677" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.060021" level="INFO">${device-port} = 18736</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.059230" elapsed="0.000871"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.062551" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.092211" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.092436" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.062448" elapsed="0.030049"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.093656" elapsed="0.000068"/>
</kw>
<msg time="2026-08-15T23:57:04.093845" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.092746" elapsed="0.001344">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.092680" elapsed="0.001516">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.062169" elapsed="0.032304">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.061755" elapsed="0.032864"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.095601" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18736 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.151558" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.151858" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.095055" elapsed="0.056868"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.152044" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:04.152472" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.061338" elapsed="0.091245"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.153207" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.060536" elapsed="0.093788"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.058740" elapsed="0.095775"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.058217" elapsed="0.096401"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.057229" elapsed="0.097516"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.056763" elapsed="0.098125"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.156103" level="INFO">${next} = 18737</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.155287" elapsed="0.000877"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.157641" level="INFO">${current_port} = 18737</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.156534" elapsed="0.001205"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.051456" elapsed="0.106481"/>
</kw>
<msg time="2026-08-15T23:57:04.158029" level="INFO">Repeating keyword, round 908/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.160655" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.160409" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.160365" elapsed="0.000468"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.161603" level="INFO">${current_Date} = 2026-08-15 23:57:04.161</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.161250" elapsed="0.000415"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.162742" level="INFO">${ellapsed_seconds} = 2566.176</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.162042" elapsed="0.000791"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.163674" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.163127" elapsed="0.000606"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.163056" elapsed="0.000703"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.159866" elapsed="0.003959"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.164350" level="INFO">${number} = 908</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.163976" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.165838" level="INFO">${number} = 908</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.165454" elapsed="0.000413"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.167859" level="INFO">${device-port} = 18737</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.167056" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.170404" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.208234" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.208484" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.170305" elapsed="0.038242"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.209571" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:57:04.209721" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.208728" elapsed="0.001144">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.208678" elapsed="0.001299">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.170028" elapsed="0.040249">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.169609" elapsed="0.040897"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.211476" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18737 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.266434" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.266601" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.210920" elapsed="0.055717"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.266726" elapsed="0.000057"/>
</return>
<msg time="2026-08-15T23:57:04.267077" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.169197" elapsed="0.097952"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.267530" elapsed="0.000914"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.168380" elapsed="0.100262"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.166558" elapsed="0.102322"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.166029" elapsed="0.102960"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.164996" elapsed="0.104122"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.164532" elapsed="0.104684"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.270413" level="INFO">${next} = 18738</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.269572" elapsed="0.000902"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.271983" level="INFO">${current_port} = 18738</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.270952" elapsed="0.001152"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.158467" elapsed="0.113773"/>
</kw>
<msg time="2026-08-15T23:57:04.272330" level="INFO">Repeating keyword, round 909/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.275030" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.274690" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.274645" elapsed="0.000531"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.275760" level="INFO">${current_Date} = 2026-08-15 23:57:04.276</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.275516" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.276288" level="INFO">${ellapsed_seconds} = 2566.061</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.275956" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.276636" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.276386" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.276366" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.274144" elapsed="0.002623"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.277310" level="INFO">${number} = 909</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.276935" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.278767" level="INFO">${number} = 909</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.278419" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.280874" level="INFO">${device-port} = 18738</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.280035" elapsed="0.000922"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.283471" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.320437" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.320664" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.283363" elapsed="0.037361"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.321653" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:04.321788" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.320935" elapsed="0.001084">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.320886" elapsed="0.001235">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.283081" elapsed="0.039324">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.282636" elapsed="0.039912"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.323494" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18738 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.388621" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.388870" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.322996" elapsed="0.065933"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.389044" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:04.389450" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.282218" elapsed="0.107341"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.390168" elapsed="0.000905"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.281402" elapsed="0.109864"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.279543" elapsed="0.111912"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.279006" elapsed="0.112548"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.277965" elapsed="0.113712"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.277494" elapsed="0.114278"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.392962" level="INFO">${next} = 18739</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.392165" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.394429" level="INFO">${current_port} = 18739</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.393386" elapsed="0.001144"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.272777" elapsed="0.121885"/>
</kw>
<msg time="2026-08-15T23:57:04.394749" level="INFO">Repeating keyword, round 910/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.397331" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.397084" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.397041" elapsed="0.000434"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.398260" level="INFO">${current_Date} = 2026-08-15 23:57:04.398</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.397909" elapsed="0.000412"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.399417" level="INFO">${ellapsed_seconds} = 2565.939</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.398657" elapsed="0.000820"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.400004" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.399642" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.399597" elapsed="0.000488"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.396515" elapsed="0.003617"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.400660" level="INFO">${number} = 910</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.400285" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.402115" level="INFO">${number} = 910</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.401753" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.404146" level="INFO">${device-port} = 18739</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.403334" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.406864" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.436695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.436958" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.406575" elapsed="0.030444"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.437930" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:04.438067" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.437189" elapsed="0.000984">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.437141" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.406299" elapsed="0.032234">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.405911" elapsed="0.032860"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.439727" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18739 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.504725" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.504979" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.439239" elapsed="0.065809"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.505169" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:04.505572" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.405481" elapsed="0.100202"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.506287" elapsed="0.000956"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.404669" elapsed="0.102767"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.402878" elapsed="0.104748"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.402301" elapsed="0.105426"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.401307" elapsed="0.106590"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.400859" elapsed="0.107138"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.509132" level="INFO">${next} = 18740</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.508340" elapsed="0.000864"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.510453" level="INFO">${current_port} = 18740</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.509564" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.395246" elapsed="0.115430"/>
</kw>
<msg time="2026-08-15T23:57:04.510784" level="INFO">Repeating keyword, round 911/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.513396" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.513150" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.513106" elapsed="0.000433"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.514250" level="INFO">${current_Date} = 2026-08-15 23:57:04.514</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.513903" elapsed="0.000407"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.515400" level="INFO">${ellapsed_seconds} = 2565.823</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.514640" elapsed="0.000819"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.516028" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.515616" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.515575" elapsed="0.000564"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.512559" elapsed="0.003643"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.516937" level="INFO">${number} = 911</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.516405" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.519003" level="INFO">${number} = 911</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.518460" elapsed="0.000581"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.521744" level="INFO">${device-port} = 18740</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.520637" elapsed="0.001251"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.525609" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.552453" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.552676" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.525258" elapsed="0.027478"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.553661" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:04.553795" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.552948" elapsed="0.001062">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.552897" elapsed="0.001212">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.524772" elapsed="0.029609">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.524226" elapsed="0.030296"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.555433" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18740 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.624716" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.624964" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.554946" elapsed="0.070074"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.625132" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:04.625531" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.523618" elapsed="0.102025"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.626244" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.522492" elapsed="0.104841"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.520012" elapsed="0.107509"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.519260" elapsed="0.108360"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.517829" elapsed="0.109913"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.517188" elapsed="0.110696"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.629015" level="INFO">${next} = 18741</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.628230" elapsed="0.000847"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.630325" level="INFO">${current_port} = 18741</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.629435" elapsed="0.000987"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.511266" elapsed="0.119286"/>
</kw>
<msg time="2026-08-15T23:57:04.630638" level="INFO">Repeating keyword, round 912/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.633257" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.633013" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.632969" elapsed="0.000442"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.634192" level="INFO">${current_Date} = 2026-08-15 23:57:04.634</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.633841" elapsed="0.000410"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.635346" level="INFO">${ellapsed_seconds} = 2565.703</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.634585" elapsed="0.000821"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.636003" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.635563" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.635522" elapsed="0.000593"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.632441" elapsed="0.003736"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.636910" level="INFO">${number} = 912</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.636379" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.638955" level="INFO">${number} = 912</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.638429" elapsed="0.000564"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.641718" level="INFO">${device-port} = 18741</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.640601" elapsed="0.001260"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.645590" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.672681" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.672956" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.645444" elapsed="0.027575"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.673956" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:57:04.674096" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.673198" elapsed="0.001006">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.673142" elapsed="0.001155">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.644758" elapsed="0.029824">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.644221" elapsed="0.030631"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.675702" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18741 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.740923" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.741138" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.675211" elapsed="0.065982"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.741305" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:04.741705" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.643609" elapsed="0.098250"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.742418" elapsed="0.000899"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.642478" elapsed="0.101025"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.639972" elapsed="0.103717"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.639222" elapsed="0.104568"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.637782" elapsed="0.106180"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.637164" elapsed="0.106897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.745210" level="INFO">${next} = 18742</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.744405" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.746558" level="INFO">${current_port} = 18742</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.745651" elapsed="0.001060"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.631159" elapsed="0.115746"/>
</kw>
<msg time="2026-08-15T23:57:04.746997" level="INFO">Repeating keyword, round 913/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.748844" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.748660" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.748633" elapsed="0.000303"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.749351" level="INFO">${current_Date} = 2026-08-15 23:57:04.749</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.749139" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.750045" level="INFO">${ellapsed_seconds} = 2565.588</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.749592" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.750502" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.750179" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.750154" elapsed="0.000512"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.748322" elapsed="0.002409"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.751466" level="INFO">${number} = 913</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.750957" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.753506" level="INFO">${number} = 913</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.753029" elapsed="0.000514"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.756281" level="INFO">${device-port} = 18742</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.755186" elapsed="0.001207"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.760092" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.792737" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.793020" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.759991" elapsed="0.033090"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.794012" elapsed="0.000080"/>
</kw>
<msg time="2026-08-15T23:57:04.794196" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.793253" elapsed="0.001134">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.793205" elapsed="0.001283">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.759565" elapsed="0.035293">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.758747" elapsed="0.036268"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.795895" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18742 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.860684" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.860992" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.795367" elapsed="0.065716"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.861232" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:57:04.861657" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.758130" elapsed="0.103638"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.862378" elapsed="0.001036"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.757022" elapsed="0.106583"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.754510" elapsed="0.109281"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.753762" elapsed="0.110237"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.752366" elapsed="0.111808"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.751722" elapsed="0.112552"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.865446" level="INFO">${next} = 18743</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.864625" elapsed="0.000882"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.866859" level="INFO">${current_port} = 18743</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.865925" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.747432" elapsed="0.119660"/>
</kw>
<msg time="2026-08-15T23:57:04.867179" level="INFO">Repeating keyword, round 914/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.870155" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.869891" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.869796" elapsed="0.000504"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.871141" level="INFO">${current_Date} = 2026-08-15 23:57:04.871</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.870753" elapsed="0.000448"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.872077" level="INFO">${ellapsed_seconds} = 2565.466</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.871535" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.872546" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.872211" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.872186" elapsed="0.000471"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.869006" elapsed="0.003715"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.873471" level="INFO">${number} = 914</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.872947" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.875600" level="INFO">${number} = 914</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.875122" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.878384" level="INFO">${device-port} = 18743</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.877277" elapsed="0.001232"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.882350" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:04.908514" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.908764" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.882213" elapsed="0.026658"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.909753" elapsed="0.000085"/>
</kw>
<msg time="2026-08-15T23:57:04.909921" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:04.909044" elapsed="0.000983">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:04.908997" elapsed="0.001122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:04.881672" elapsed="0.028715">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.880874" elapsed="0.029775"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:04.911616" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18743 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:04.976949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:04.977166" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:04.911038" elapsed="0.066183"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:04.977334" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:04.977739" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.880266" elapsed="0.097627"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:04.978527" elapsed="0.000909"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.879151" elapsed="0.100480"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.876615" elapsed="0.103263"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.875883" elapsed="0.104102"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.874458" elapsed="0.105652"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.873726" elapsed="0.106481"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.981425" level="INFO">${next} = 18744</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.980555" elapsed="0.000947"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.982898" level="INFO">${current_port} = 18744</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:04.981917" elapsed="0.001084"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.867677" elapsed="0.115455"/>
</kw>
<msg time="2026-08-15T23:57:04.983219" level="INFO">Repeating keyword, round 915/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:04.985770" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:04.985527" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.985486" elapsed="0.000467"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.986728" level="INFO">${current_Date} = 2026-08-15 23:57:04.987</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:04.986292" elapsed="0.000483"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:04.987468" level="INFO">${ellapsed_seconds} = 2565.35</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:04.987031" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:04.987953" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:04.987600" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:04.987575" elapsed="0.000491"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:04.984987" elapsed="0.003143"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.988875" level="INFO">${number} = 915</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.988332" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.991085" level="INFO">${number} = 915</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.990535" elapsed="0.000588"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:04.994307" level="INFO">${device-port} = 18744</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:04.993028" elapsed="0.001419"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.000680" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.028575" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.028832" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.000580" elapsed="0.028315"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.029767" elapsed="0.000087"/>
</kw>
<msg time="2026-08-15T23:57:05.029934" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.029065" elapsed="0.001051">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.029016" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.000281" elapsed="0.030233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:04.996931" elapsed="0.033724"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.031534" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18744 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.100953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.101162" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.031047" elapsed="0.070169"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.101326" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:05.101726" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:04.996277" elapsed="0.105605"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.102492" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:04.995127" elapsed="0.108436"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:04.992259" elapsed="0.111490"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:04.991354" elapsed="0.112542"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.989767" elapsed="0.114256"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:04.989136" elapsed="0.114982"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.105241" level="INFO">${next} = 18745</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.104457" elapsed="0.000844"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.106668" level="INFO">${current_port} = 18745</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.105657" elapsed="0.001109"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:04.983665" elapsed="0.123296"/>
</kw>
<msg time="2026-08-15T23:57:05.107047" level="INFO">Repeating keyword, round 916/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.109725" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.109481" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.109440" elapsed="0.000463"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.110731" level="INFO">${current_Date} = 2026-08-15 23:57:05.111</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.110376" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.111899" level="INFO">${ellapsed_seconds} = 2565.226</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.111182" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.112642" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.112119" elapsed="0.000645"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.112077" elapsed="0.000770"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.108954" elapsed="0.003999"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.114119" level="INFO">${number} = 916</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.113277" elapsed="0.000902"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.115995" level="INFO">${number} = 916</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.115640" elapsed="0.000382"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.117968" level="INFO">${device-port} = 18745</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.117171" elapsed="0.000878"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.120705" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.152555" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.152775" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.120609" elapsed="0.032261"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.153734" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:05.153900" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.153039" elapsed="0.000966">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.152992" elapsed="0.001105">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.120165" elapsed="0.034227">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.119755" elapsed="0.034846"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.155466" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18745 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.220636" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.220883" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.154983" elapsed="0.065958"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.221053" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:05.221452" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.119346" elapsed="0.102217"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.222167" elapsed="0.000898"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.118529" elapsed="0.104729"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.116701" elapsed="0.106746"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.116180" elapsed="0.107367"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.115200" elapsed="0.108470"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.114571" elapsed="0.109195"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.224953" level="INFO">${next} = 18746</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.224159" elapsed="0.000855"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.226258" level="INFO">${current_port} = 18746</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.225371" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.107466" elapsed="0.119037"/>
</kw>
<msg time="2026-08-15T23:57:05.226588" level="INFO">Repeating keyword, round 917/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.229116" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.228871" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.228826" elapsed="0.000432"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.229950" level="INFO">${current_Date} = 2026-08-15 23:57:05.230</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.229579" elapsed="0.000431"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.230979" level="INFO">${ellapsed_seconds} = 2565.107</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.230387" elapsed="0.000619"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.231314" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.231076" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.231057" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.228315" elapsed="0.003121"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.231962" level="INFO">${number} = 917</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.231582" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.233387" level="INFO">${number} = 917</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.233052" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.235373" level="INFO">${device-port} = 18746</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.234573" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.238084" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.272847" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.273075" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.237795" elapsed="0.035338"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.274037" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:05.274173" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.273301" elapsed="0.001088">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.273254" elapsed="0.001237">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.237519" elapsed="0.037265">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.237133" elapsed="0.037849"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.275839" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18746 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.340718" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.340970" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.275329" elapsed="0.065697"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.341138" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:05.341537" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.236704" elapsed="0.104941"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.342293" elapsed="0.000879"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.235925" elapsed="0.107438"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.234110" elapsed="0.109470"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.233571" elapsed="0.110112"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.232588" elapsed="0.111263"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.232145" elapsed="0.111810"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.345136" level="INFO">${next} = 18747</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.344298" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.346498" level="INFO">${current_port} = 18747</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.345558" elapsed="0.001037"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.227065" elapsed="0.119660"/>
</kw>
<msg time="2026-08-15T23:57:05.346840" level="INFO">Repeating keyword, round 918/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.349327" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.349083" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.349041" elapsed="0.000431"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.350304" level="INFO">${current_Date} = 2026-08-15 23:57:05.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.349899" elapsed="0.000469"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.351140" level="INFO">${ellapsed_seconds} = 2564.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.350712" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.351474" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.351238" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.351220" elapsed="0.000333"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.348520" elapsed="0.003079"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.352127" level="INFO">${number} = 918</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.351746" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.353562" level="INFO">${number} = 918</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.353224" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.355583" level="INFO">${device-port} = 18747</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.354781" elapsed="0.000881"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.358106" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.396858" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.397088" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.358010" elapsed="0.039138"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.398070" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:05.398251" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.397317" elapsed="0.001046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.397268" elapsed="0.001188">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.357710" elapsed="0.041019">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.357326" elapsed="0.041653"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.399851" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18747 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.464885" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.465115" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.399337" elapsed="0.065834"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.465292" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:57:05.465724" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.356915" elapsed="0.108960"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.466482" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.356119" elapsed="0.111472"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.354332" elapsed="0.113449"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.353749" elapsed="0.114185"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.352758" elapsed="0.115306"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.352308" elapsed="0.115854"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.469318" level="INFO">${next} = 18748</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.468509" elapsed="0.000869"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.470678" level="INFO">${current_port} = 18748</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.469746" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.347261" elapsed="0.123712"/>
</kw>
<msg time="2026-08-15T23:57:05.471063" level="INFO">Repeating keyword, round 919/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.473600" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.473357" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.473314" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.474553" level="INFO">${current_Date} = 2026-08-15 23:57:05.474</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.474103" elapsed="0.000512"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.475264" level="INFO">${ellapsed_seconds} = 2564.863</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.474933" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.475612" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.475362" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.475343" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.472791" elapsed="0.002950"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.476268" level="INFO">${number} = 919</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.475902" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.477711" level="INFO">${number} = 919</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.477369" elapsed="0.000369"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.479744" level="INFO">${device-port} = 18748</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.478947" elapsed="0.000897"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.482367" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.516886" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.517111" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.482260" elapsed="0.034910"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.518106" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:57:05.518244" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.517337" elapsed="0.001109">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.517289" elapsed="0.001255">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.481966" elapsed="0.036888">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.481543" elapsed="0.037461"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.519869" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18748 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.585063" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.585287" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.519355" elapsed="0.065988"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.585454" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:05.585904" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.481121" elapsed="0.104901"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.586622" elapsed="0.000876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.480292" elapsed="0.107394"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.478466" elapsed="0.109458"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.477915" elapsed="0.110112"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.476916" elapsed="0.111235"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.476451" elapsed="0.111795"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.589391" level="INFO">${next} = 18749</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.588592" elapsed="0.000860"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.590727" level="INFO">${current_port} = 18749</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.589855" elapsed="0.001030"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.471502" elapsed="0.119517"/>
</kw>
<msg time="2026-08-15T23:57:05.591104" level="INFO">Repeating keyword, round 920/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.593645" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.593398" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.593354" elapsed="0.000437"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.594703" level="INFO">${current_Date} = 2026-08-15 23:57:05.595</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.594345" elapsed="0.000428"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.595459" level="INFO">${ellapsed_seconds} = 2564.742</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.595029" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.595949" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.595596" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.595570" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.592864" elapsed="0.003263"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.596859" level="INFO">${number} = 920</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.596330" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.598897" level="INFO">${number} = 920</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.598393" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.601690" level="INFO">${device-port} = 18749</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.600561" elapsed="0.001269"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.604644" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.637362" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.637619" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.604547" elapsed="0.033136"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.638760" elapsed="0.000096"/>
</kw>
<msg time="2026-08-15T23:57:05.638946" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.637919" elapsed="0.001169">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.637863" elapsed="0.001333">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.604270" elapsed="0.035229">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.603880" elapsed="0.035858"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.640744" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18749 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.705293" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.705512" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.640207" elapsed="0.065360"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.705679" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:57:05.706187" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.603436" elapsed="0.102865"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.706924" elapsed="0.000929"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.602496" elapsed="0.105562"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.599918" elapsed="0.108355"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.599166" elapsed="0.109212"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.597735" elapsed="0.110772"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.597115" elapsed="0.111493"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.709864" level="INFO">${next} = 18750</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.709035" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.711289" level="INFO">${current_port} = 18750</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.710344" elapsed="0.001049"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.591551" elapsed="0.119973"/>
</kw>
<msg time="2026-08-15T23:57:05.711610" level="INFO">Repeating keyword, round 921/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.713840" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.713663" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.713634" elapsed="0.000298"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.714449" level="INFO">${current_Date} = 2026-08-15 23:57:05.714</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.714214" elapsed="0.000275"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.715160" level="INFO">${ellapsed_seconds} = 2564.623</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.714697" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.715631" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.715295" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.715269" elapsed="0.000473"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.713324" elapsed="0.002501"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.716540" level="INFO">${number} = 921</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.716033" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.718558" level="INFO">${number} = 921</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.718088" elapsed="0.000507"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.721326" level="INFO">${device-port} = 18750</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.720219" elapsed="0.001221"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.724916" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.760523" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.760669" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.724741" elapsed="0.035965"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.761295" elapsed="0.000035"/>
</kw>
<msg time="2026-08-15T23:57:05.761378" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.760843" elapsed="0.000669">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.760785" elapsed="0.000790">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.724361" elapsed="0.037389">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.723786" elapsed="0.038076"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.762409" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18750 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.828833" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.828968" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.762105" elapsed="0.066898"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.829074" elapsed="0.000048"/>
</return>
<msg time="2026-08-15T23:57:05.829333" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.723212" elapsed="0.106191"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.829758" elapsed="0.000601"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.722092" elapsed="0.108386"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.719562" elapsed="0.111035"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.718841" elapsed="0.111821"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.717432" elapsed="0.113308"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.716791" elapsed="0.114030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.831514" level="INFO">${next} = 18751</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.831046" elapsed="0.000505"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.832342" level="INFO">${current_port} = 18751</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.831775" elapsed="0.000627"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.712099" elapsed="0.120384"/>
</kw>
<msg time="2026-08-15T23:57:05.832537" level="INFO">Repeating keyword, round 922/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.834152" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.833996" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.833967" elapsed="0.000276"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.834723" level="INFO">${current_Date} = 2026-08-15 23:57:05.835</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.834500" elapsed="0.000260"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.835448" level="INFO">${ellapsed_seconds} = 2564.502</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.835006" elapsed="0.000479"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.835941" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.835583" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.835558" elapsed="0.000496"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.833618" elapsed="0.002500"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.836857" level="INFO">${number} = 922</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.836325" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.838941" level="INFO">${number} = 922</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.838430" elapsed="0.000541"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.840939" level="INFO">${device-port} = 18751</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.840129" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.843652" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:05.880726" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.880893" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.843406" elapsed="0.037524"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.881479" elapsed="0.000036"/>
</kw>
<msg time="2026-08-15T23:57:05.881563" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:05.881037" elapsed="0.000593">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:05.881006" elapsed="0.000682">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.843130" elapsed="0.038767">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.842705" elapsed="0.039328"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.882555" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18751 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:05.948740" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:05.948995" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.882254" elapsed="0.066797"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:05.949164" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:05.949563" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.842294" elapsed="0.107379"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:05.950300" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.841462" elapsed="0.109911"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.839652" elapsed="0.111912"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.839129" elapsed="0.112536"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.837737" elapsed="0.114051"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.837112" elapsed="0.114823"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.953074" level="INFO">${next} = 18752</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.952283" elapsed="0.000851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.954441" level="INFO">${current_port} = 18752</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:05.953492" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.832837" elapsed="0.121825"/>
</kw>
<msg time="2026-08-15T23:57:05.954747" level="INFO">Repeating keyword, round 923/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:05.957316" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:05.957074" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.957031" elapsed="0.000427"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.958217" level="INFO">${current_Date} = 2026-08-15 23:57:05.958</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:05.957790" elapsed="0.000486"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:05.959126" level="INFO">${ellapsed_seconds} = 2564.379</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:05.958610" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:05.959478" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:05.959239" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:05.959218" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:05.956514" elapsed="0.003089"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.960130" level="INFO">${number} = 923</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.959748" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.961564" level="INFO">${number} = 923</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.961226" elapsed="0.000364"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:05.963567" level="INFO">${device-port} = 18752</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:05.962757" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:05.966352" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.021183" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.021531" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:05.966094" elapsed="0.055498"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.022715" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:57:06.022888" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.021876" elapsed="0.001241">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.021748" elapsed="0.001470">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:05.965762" elapsed="0.057751">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:05.965368" elapsed="0.058287"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.024567" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18752 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.096650" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.097011" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.024061" elapsed="0.073009"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.097218" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:57:06.097709" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:05.964958" elapsed="0.132936"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.098518" elapsed="0.000952"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:05.964136" elapsed="0.135528"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:05.962309" elapsed="0.137591"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:05.961750" elapsed="0.138258"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.960757" elapsed="0.139381"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:05.960315" elapsed="0.139921"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.101412" level="INFO">${next} = 18753</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.100586" elapsed="0.000886"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.102791" level="INFO">${current_port} = 18753</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.101891" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:05.955230" elapsed="0.147837"/>
</kw>
<msg time="2026-08-15T23:57:06.103155" level="INFO">Repeating keyword, round 924/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.105885" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.105546" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.105490" elapsed="0.000543"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.106785" level="INFO">${current_Date} = 2026-08-15 23:57:06.107</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.106457" elapsed="0.000369"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.107314" level="INFO">${ellapsed_seconds} = 2564.23</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.106978" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.107661" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.107410" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.107392" elapsed="0.000348"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.104996" elapsed="0.002790"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.108315" level="INFO">${number} = 924</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.107950" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.109779" level="INFO">${number} = 924</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.109420" elapsed="0.000405"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.112004" level="INFO">${device-port} = 18753</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.110986" elapsed="0.001100"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.114759" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.149702" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.149960" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.114654" elapsed="0.035366"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.150931" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:06.151069" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.150188" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.150139" elapsed="0.001129">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.114223" elapsed="0.037328">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.113826" elapsed="0.037943"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.152646" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18753 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.221498" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.221725" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.152156" elapsed="0.069625"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.221928" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:06.222331" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.113373" elapsed="0.109067"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.223040" elapsed="0.000866"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.112529" elapsed="0.111567"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.110517" elapsed="0.113767"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.109985" elapsed="0.114400"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.108968" elapsed="0.115541"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.108498" elapsed="0.116106"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.225755" level="INFO">${next} = 18754</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.224994" elapsed="0.000861"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.227110" level="INFO">${current_port} = 18754</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.226226" elapsed="0.000981"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.103622" elapsed="0.123715"/>
</kw>
<msg time="2026-08-15T23:57:06.227423" level="INFO">Repeating keyword, round 925/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.230043" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.229763" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.229707" elapsed="0.000480"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.230822" level="INFO">${current_Date} = 2026-08-15 23:57:06.231</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.230520" elapsed="0.000330"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.231302" level="INFO">${ellapsed_seconds} = 2564.106</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.231000" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.231632" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.231397" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.231379" elapsed="0.000341"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.229177" elapsed="0.002589"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.232290" level="INFO">${number} = 925</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.231929" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.233837" level="INFO">${number} = 925</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.233470" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.235815" level="INFO">${device-port} = 18754</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.235019" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.238529" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.273036" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.273278" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.238433" elapsed="0.034904"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.274288" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:06.274422" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.273506" elapsed="0.001109">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.273458" elapsed="0.001256">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.238155" elapsed="0.036865">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.237561" elapsed="0.037603"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.276028" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18754 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.340859" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.341116" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.275509" elapsed="0.065663"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.341293" elapsed="0.000081"/>
</return>
<msg time="2026-08-15T23:57:06.341871" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.237143" elapsed="0.104847"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.342589" elapsed="0.001047"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.236338" elapsed="0.107570"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.234543" elapsed="0.109573"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.234022" elapsed="0.110199"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.233017" elapsed="0.111338"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.232470" elapsed="0.111984"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.345893" level="INFO">${next} = 18755</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.344916" elapsed="0.001046"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.347180" level="INFO">${current_port} = 18755</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.346350" elapsed="0.000893"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.227910" elapsed="0.119418"/>
</kw>
<msg time="2026-08-15T23:57:06.347384" level="INFO">Repeating keyword, round 926/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.349194" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.349017" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.348973" elapsed="0.000313"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.349866" level="INFO">${current_Date} = 2026-08-15 23:57:06.350</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.349549" elapsed="0.000358"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.350613" level="INFO">${ellapsed_seconds} = 2563.987</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.350124" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.351159" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.350785" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.350754" elapsed="0.000520"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.348579" elapsed="0.002760"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.352111" level="INFO">${number} = 926</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.351554" elapsed="0.000594"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.354291" level="INFO">${number} = 926</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.353759" elapsed="0.000570"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.357277" level="INFO">${device-port} = 18755</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.356058" elapsed="0.001333"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.360344" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.393588" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.393862" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.360235" elapsed="0.033691"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.394954" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:57:06.395134" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.394138" elapsed="0.001118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.394083" elapsed="0.001270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.359948" elapsed="0.035736">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.359315" elapsed="0.036731"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.397035" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18755 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.468774" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.468998" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.396457" elapsed="0.072577"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.469128" elapsed="0.000062"/>
</return>
<msg time="2026-08-15T23:57:06.469434" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.358838" elapsed="0.110698"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.470091" elapsed="0.000984"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.358019" elapsed="0.113278"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.355351" elapsed="0.116166"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.354552" elapsed="0.117075"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.353099" elapsed="0.118662"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.352392" elapsed="0.119563"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.473206" level="INFO">${next} = 18756</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.472361" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.474636" level="INFO">${current_port} = 18756</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.473673" elapsed="0.001066"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.347702" elapsed="0.127235"/>
</kw>
<msg time="2026-08-15T23:57:06.475027" level="INFO">Repeating keyword, round 927/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.477848" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.477527" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.477434" elapsed="0.000519"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.478305" level="INFO">${current_Date} = 2026-08-15 23:57:06.478</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.478116" elapsed="0.000218"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.478844" level="INFO">${ellapsed_seconds} = 2563.859</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.478489" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.479204" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.478950" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.478925" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.476916" elapsed="0.002415"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.479860" level="INFO">${number} = 927</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.479477" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.481334" level="INFO">${number} = 927</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.480989" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.483401" level="INFO">${device-port} = 18756</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.482569" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.488814" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.521127" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.521351" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.488694" elapsed="0.032716"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.522383" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:06.522518" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.521616" elapsed="0.001107">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.521566" elapsed="0.001303">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.488396" elapsed="0.034786">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.485253" elapsed="0.038090"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.524280" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18756 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.592949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.593171" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.523728" elapsed="0.069502"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.593350" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:57:06.593864" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.484830" elapsed="0.109162"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.594594" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.483969" elapsed="0.111726"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.482109" elapsed="0.113827"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.481541" elapsed="0.114498"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.480508" elapsed="0.115655"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.480046" elapsed="0.116211"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.597392" level="INFO">${next} = 18757</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.596600" elapsed="0.000882"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.598744" level="INFO">${current_port} = 18757</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.597886" elapsed="0.001038"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.475498" elapsed="0.123557"/>
</kw>
<msg time="2026-08-15T23:57:06.599152" level="INFO">Repeating keyword, round 928/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.601941" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.601678" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.601633" elapsed="0.000381"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.602354" level="INFO">${current_Date} = 2026-08-15 23:57:06.602</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.602194" elapsed="0.000186"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.602855" level="INFO">${ellapsed_seconds} = 2563.735</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.602527" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.603192" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.602953" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.602935" elapsed="0.000335"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.600990" elapsed="0.002325"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.603833" level="INFO">${number} = 928</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.603458" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.605273" level="INFO">${number} = 928</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.604933" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.607282" level="INFO">${device-port} = 18757</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.606480" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.610043" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.645482" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.645712" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.609944" elapsed="0.035827"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.646712" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:06.646897" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.645986" elapsed="0.001019">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.645938" elapsed="0.001160">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.609475" elapsed="0.037909">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.609048" elapsed="0.038559"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.648500" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18757 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.717014" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.717229" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.647998" elapsed="0.069294"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.717448" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:06.717910" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.608619" elapsed="0.109408"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.718619" elapsed="0.000916"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.607836" elapsed="0.111892"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.606029" elapsed="0.113930"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.605472" elapsed="0.114591"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.604467" elapsed="0.115719"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.604015" elapsed="0.116268"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.721520" level="INFO">${next} = 18758</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.720647" elapsed="0.000935"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.722910" level="INFO">${current_port} = 18758</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.721993" elapsed="0.001016"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.599612" elapsed="0.123525"/>
</kw>
<msg time="2026-08-15T23:57:06.723225" level="INFO">Repeating keyword, round 929/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.725942" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.725664" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.725620" elapsed="0.000399"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.726324" level="INFO">${current_Date} = 2026-08-15 23:57:06.726</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.726167" elapsed="0.000183"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.726833" level="INFO">${ellapsed_seconds} = 2563.611</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.726497" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.727173" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.726932" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.726913" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.725053" elapsed="0.002244"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.727845" level="INFO">${number} = 929</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.727442" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.729311" level="INFO">${number} = 929</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.728966" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.731361" level="INFO">${device-port} = 18758</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.730533" elapsed="0.000912"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.734190" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.769084" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.769343" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.733919" elapsed="0.035487"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.770350" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:06.770488" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.769573" elapsed="0.001102">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.769526" elapsed="0.001247">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.733600" elapsed="0.037494">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.733192" elapsed="0.038059"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.772135" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18758 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.837543" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.837761" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.771599" elapsed="0.066256"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.837973" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:57:06.838401" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.732751" elapsed="0.105761"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.839147" elapsed="0.000904"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.731935" elapsed="0.108332"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.730078" elapsed="0.110383"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.729516" elapsed="0.111048"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.728492" elapsed="0.112196"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.728041" elapsed="0.112741"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.842037" level="INFO">${next} = 18759</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.841194" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.843406" level="INFO">${current_port} = 18759</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.842478" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.723661" elapsed="0.119976"/>
</kw>
<msg time="2026-08-15T23:57:06.843724" level="INFO">Repeating keyword, round 930/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.846379" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.846117" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.846074" elapsed="0.000451"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.847348" level="INFO">${current_Date} = 2026-08-15 23:57:06.847</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.846985" elapsed="0.000431"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.848502" level="INFO">${ellapsed_seconds} = 2563.49</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.847758" elapsed="0.000806"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.849354" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.848725" elapsed="0.000777"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.848682" elapsed="0.000876"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.845543" elapsed="0.004120"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.850367" level="INFO">${number} = 930</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.849993" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.851853" level="INFO">${number} = 930</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.851481" elapsed="0.000400"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.853917" level="INFO">${device-port} = 18759</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.853062" elapsed="0.000938"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.856567" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:06.888870" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.889243" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.856449" elapsed="0.032898"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.890416" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:57:06.890566" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:06.889525" elapsed="0.001151">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:06.889476" elapsed="0.001294">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.856157" elapsed="0.035011">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.855720" elapsed="0.035715"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.892347" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18759 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:06.961266" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:06.961488" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.891851" elapsed="0.069694"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:06.961661" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:06.962122" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.855296" elapsed="0.106936"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:06.962796" elapsed="0.000907"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.854449" elapsed="0.109484"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.852578" elapsed="0.111547"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.852043" elapsed="0.112183"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.851023" elapsed="0.113329"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.850557" elapsed="0.113893"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.965628" level="INFO">${next} = 18760</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.964796" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.967074" level="INFO">${current_port} = 18760</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:06.966107" elapsed="0.001069"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.844210" elapsed="0.123097"/>
</kw>
<msg time="2026-08-15T23:57:06.967395" level="INFO">Repeating keyword, round 931/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:06.969909" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:06.969731" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.969686" elapsed="0.000287"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.970287" level="INFO">${current_Date} = 2026-08-15 23:57:06.970</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:06.970123" elapsed="0.000192"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:06.970783" level="INFO">${ellapsed_seconds} = 2563.367</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:06.970462" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:06.971144" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:06.970896" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:06.970877" elapsed="0.000346"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:06.969149" elapsed="0.002119"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.971776" level="INFO">${number} = 931</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.971412" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.973264" level="INFO">${number} = 931</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.972905" elapsed="0.000387"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:06.975257" level="INFO">${device-port} = 18760</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:06.974454" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:06.977867" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.012970" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.013233" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:06.977737" elapsed="0.035561"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.014276" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:07.014412" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.013472" elapsed="0.001168">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.013421" elapsed="0.001325">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:06.977451" elapsed="0.037619">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:06.977033" elapsed="0.038186"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.016127" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18760 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.085044" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.085296" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.015575" elapsed="0.069779"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.085475" elapsed="0.000089"/>
</return>
<msg time="2026-08-15T23:57:07.085968" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:06.976591" elapsed="0.109492"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.086674" elapsed="0.000947"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:06.975781" elapsed="0.112093"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:06.974004" elapsed="0.114077"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:06.973452" elapsed="0.114732"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.972439" elapsed="0.115875"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:06.971983" elapsed="0.116428"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.089679" level="INFO">${next} = 18761</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.088844" elapsed="0.000906"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.091119" level="INFO">${current_port} = 18761</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.090175" elapsed="0.001044"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:06.967877" elapsed="0.123475"/>
</kw>
<msg time="2026-08-15T23:57:07.091441" level="INFO">Repeating keyword, round 932/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.094006" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.093887" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.093864" elapsed="0.000208"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.094448" level="INFO">${current_Date} = 2026-08-15 23:57:07.094</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.094277" elapsed="0.000199"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.094998" level="INFO">${ellapsed_seconds} = 2563.243</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.094626" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.095352" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.095097" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.095079" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.093333" elapsed="0.002146"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.096034" level="INFO">${number} = 932</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.095627" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.097537" level="INFO">${number} = 932</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.097178" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.099586" level="INFO">${device-port} = 18761</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.098753" elapsed="0.000917"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.102279" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.137280" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.137528" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.102177" elapsed="0.035415"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.138639" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:57:07.138782" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.137760" elapsed="0.001167">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.137712" elapsed="0.001310">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.101887" elapsed="0.037412">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.101444" elapsed="0.038092"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.140463" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18761 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.209296" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.209635" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.139960" elapsed="0.069738"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.209895" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:57:07.210422" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.100993" elapsed="0.109548"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.211250" elapsed="0.001024"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.100148" elapsed="0.112330"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.098297" elapsed="0.114387"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.097732" elapsed="0.115065"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.096671" elapsed="0.116319"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.096219" elapsed="0.116953"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.214186" level="INFO">${next} = 18762</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.213556" elapsed="0.000667"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.215117" level="INFO">${current_port} = 18762</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.214482" elapsed="0.000701"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.091946" elapsed="0.123324"/>
</kw>
<msg time="2026-08-15T23:57:07.215328" level="INFO">Repeating keyword, round 933/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.217131" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.216937" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.216906" elapsed="0.000318"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.217663" level="INFO">${current_Date} = 2026-08-15 23:57:07.218</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.217431" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.218390" level="INFO">${ellapsed_seconds} = 2563.119</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.217937" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.218896" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.218525" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.218499" elapsed="0.000510"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.216548" elapsed="0.002523"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.219822" level="INFO">${number} = 933</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.219282" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.221896" level="INFO">${number} = 933</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.221387" elapsed="0.000548"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.226497" level="INFO">${device-port} = 18762</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.224645" elapsed="0.002033"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.231616" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.261302" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.261540" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.231450" elapsed="0.030150"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.262569" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:07.262706" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.261784" elapsed="0.001183">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.261729" elapsed="0.001344">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.231035" elapsed="0.032330">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.230352" elapsed="0.033157"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.264382" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18762 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.333070" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.333384" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.263891" elapsed="0.069552"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.333591" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:57:07.334145" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.229567" elapsed="0.104694"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.334932" elapsed="0.001013"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.227695" elapsed="0.108454"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.223598" elapsed="0.112745"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.222157" elapsed="0.114290"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.220709" elapsed="0.115867"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.220082" elapsed="0.116594"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.337932" level="INFO">${next} = 18763</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.337091" elapsed="0.000904"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.339296" level="INFO">${current_port} = 18763</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.338372" elapsed="0.001021"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.215666" elapsed="0.123862"/>
</kw>
<msg time="2026-08-15T23:57:07.339617" level="INFO">Repeating keyword, round 934/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.342158" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.341995" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.341965" elapsed="0.000284"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.342772" level="INFO">${current_Date} = 2026-08-15 23:57:07.343</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.342532" elapsed="0.000299"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.343497" level="INFO">${ellapsed_seconds} = 2562.994</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.343044" elapsed="0.000490"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.343997" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.343632" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.343607" elapsed="0.000504"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.341514" elapsed="0.002661"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.344926" level="INFO">${number} = 934</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.344381" elapsed="0.000598"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.347426" level="INFO">${number} = 934</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.346770" elapsed="0.000704"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.350585" level="INFO">${device-port} = 18763</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.349326" elapsed="0.001375"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.354576" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.384977" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.385265" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.354278" elapsed="0.031067"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.386455" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:57:07.386619" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.385558" elapsed="0.001179">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.385496" elapsed="0.001393">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.353961" elapsed="0.033254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.353333" elapsed="0.034159"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.388255" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18763 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.461151" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.461386" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.387899" elapsed="0.073543"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.461564" elapsed="0.000087"/>
</return>
<msg time="2026-08-15T23:57:07.462071" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.352636" elapsed="0.109548"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.462763" elapsed="0.000981"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.351413" elapsed="0.112572"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.348595" elapsed="0.115586"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.347772" elapsed="0.116514"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.345981" elapsed="0.118435"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.345250" elapsed="0.119267"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.465765" level="INFO">${next} = 18764</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.464984" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.466691" level="INFO">${current_port} = 18764</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.466137" elapsed="0.000613"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.340138" elapsed="0.126726"/>
</kw>
<msg time="2026-08-15T23:57:07.466924" level="INFO">Repeating keyword, round 935/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.468556" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.468398" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.468371" elapsed="0.000275"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.469125" level="INFO">${current_Date} = 2026-08-15 23:57:07.469</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.468891" elapsed="0.000278"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.469849" level="INFO">${ellapsed_seconds} = 2562.868</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.469378" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.470330" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.469986" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.469960" elapsed="0.000480"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.468061" elapsed="0.002443"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.471247" level="INFO">${number} = 935</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.470704" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.473280" level="INFO">${number} = 935</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.472771" elapsed="0.000547"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.476063" level="INFO">${device-port} = 18764</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.474957" elapsed="0.001217"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.479366" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.513155" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.513384" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.479109" elapsed="0.034335"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.514385" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:07.514519" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.513614" elapsed="0.001115">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.513566" elapsed="0.001303">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.478822" elapsed="0.036338">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.478414" elapsed="0.036888"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.516174" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18764 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.581686" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.581950" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.515649" elapsed="0.066357"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.582118" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:07.582523" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.477988" elapsed="0.104643"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.583230" elapsed="0.000882"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.476783" elapsed="0.107519"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.474303" elapsed="0.110197"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.473546" elapsed="0.111056"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.472149" elapsed="0.112577"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.471501" elapsed="0.113415"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.586015" level="INFO">${next} = 18765</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.585267" elapsed="0.000786"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.586835" level="INFO">${current_port} = 18765</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.586277" elapsed="0.000620"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.467211" elapsed="0.119767"/>
</kw>
<msg time="2026-08-15T23:57:07.587033" level="INFO">Repeating keyword, round 936/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.588590" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.588438" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.588411" elapsed="0.000269"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.589213" level="INFO">${current_Date} = 2026-08-15 23:57:07.589</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.588978" elapsed="0.000272"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.589930" level="INFO">${ellapsed_seconds} = 2562.748</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.589459" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.590413" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.590066" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.590040" elapsed="0.000483"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.588107" elapsed="0.002480"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.591331" level="INFO">${number} = 936</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.590790" elapsed="0.000578"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.593386" level="INFO">${number} = 936</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.592907" elapsed="0.000516"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.596182" level="INFO">${device-port} = 18765</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.595064" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.599495" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.636964" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.637237" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.599391" elapsed="0.037924"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.638365" elapsed="0.000078"/>
</kw>
<msg time="2026-08-15T23:57:07.638536" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.637502" elapsed="0.001156">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.637449" elapsed="0.001310">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.598938" elapsed="0.040174">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.598517" elapsed="0.040838"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.640357" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18765 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.713328" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.713562" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.639778" elapsed="0.073841"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.713744" elapsed="0.000118"/>
</return>
<msg time="2026-08-15T23:57:07.714221" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.598102" elapsed="0.116239"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.714996" elapsed="0.000953"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.596983" elapsed="0.119163"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.594408" elapsed="0.121931"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.593645" elapsed="0.122800"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.592239" elapsed="0.124336"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.591585" elapsed="0.125094"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.717920" level="INFO">${next} = 18766</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.717143" elapsed="0.000817"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.718770" level="INFO">${current_port} = 18766</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.718190" elapsed="0.000679"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.587298" elapsed="0.131669"/>
</kw>
<msg time="2026-08-15T23:57:07.719025" level="INFO">Repeating keyword, round 937/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.720794" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.720595" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.720567" elapsed="0.000358"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.721400" level="INFO">${current_Date} = 2026-08-15 23:57:07.721</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.721161" elapsed="0.000283"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.722168" level="INFO">${ellapsed_seconds} = 2562.616</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.721667" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.722674" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.722315" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.722287" elapsed="0.000502"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.720226" elapsed="0.002656"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.723614" level="INFO">${number} = 937</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.723095" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.725893" level="INFO">${number} = 937</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.725236" elapsed="0.000696"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.728980" level="INFO">${device-port} = 18766</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.727590" elapsed="0.001488"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.731856" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.765185" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.765423" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.731707" elapsed="0.033775"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.766443" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:07.766579" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.765659" elapsed="0.001124">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.765608" elapsed="0.001308">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.731426" elapsed="0.035776">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.730785" elapsed="0.036561"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.768215" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18766 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.837544" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.837777" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.767696" elapsed="0.070178"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.837995" elapsed="0.000082"/>
</return>
<msg time="2026-08-15T23:57:07.838437" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.730358" elapsed="0.108189"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.839169" elapsed="0.000960"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.729534" elapsed="0.110790"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.726952" elapsed="0.113565"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.726178" elapsed="0.114443"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.724542" elapsed="0.116234"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.723900" elapsed="0.117049"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.842132" level="INFO">${next} = 18767</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.841298" elapsed="0.000894"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.843472" level="INFO">${current_port} = 18767</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.842554" elapsed="0.001014"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.719325" elapsed="0.124375"/>
</kw>
<msg time="2026-08-15T23:57:07.843787" level="INFO">Repeating keyword, round 938/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.846452" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.846203" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.846160" elapsed="0.000438"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.847407" level="INFO">${current_Date} = 2026-08-15 23:57:07.847</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.847041" elapsed="0.000425"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.848535" level="INFO">${ellapsed_seconds} = 2562.49</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.847795" elapsed="0.000798"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.849183" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.848838" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.848761" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.845632" elapsed="0.003676"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.849833" level="INFO">${number} = 938</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.849453" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.851272" level="INFO">${number} = 938</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.850930" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.853302" level="INFO">${device-port} = 18767</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.852471" elapsed="0.000911"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.856077" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:07.888993" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.889221" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.855979" elapsed="0.033301"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.890204" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:07.890340" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:07.889446" elapsed="0.001001">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:07.889399" elapsed="0.001141">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.855678" elapsed="0.035175">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.855094" elapsed="0.035973"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.891930" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18767 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:07.961218" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:07.961435" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.891416" elapsed="0.070073"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:07.961601" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:07.962044" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.854657" elapsed="0.107497"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:07.962712" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.853854" elapsed="0.110005"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.852021" elapsed="0.112037"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.851468" elapsed="0.112690"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.850465" elapsed="0.113863"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.850018" elapsed="0.114439"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.965668" level="INFO">${next} = 18768</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.964898" elapsed="0.000829"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.967089" level="INFO">${current_port} = 18768</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:07.966141" elapsed="0.001050"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.844298" elapsed="0.123024"/>
</kw>
<msg time="2026-08-15T23:57:07.967407" level="INFO">Repeating keyword, round 939/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:07.970123" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:07.969839" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.969759" elapsed="0.000522"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.971018" level="INFO">${current_Date} = 2026-08-15 23:57:07.971</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:07.970610" elapsed="0.000471"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:07.972123" level="INFO">${ellapsed_seconds} = 2562.366</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:07.971409" elapsed="0.000773"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:07.972910" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:07.972340" elapsed="0.000628"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:07.972298" elapsed="0.000694"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:07.969260" elapsed="0.003778"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.973550" level="INFO">${number} = 939</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.973181" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.975013" level="INFO">${number} = 939</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.974648" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:07.976997" level="INFO">${device-port} = 18768</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:07.976189" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:07.982173" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.013321" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.013563" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:07.982073" elapsed="0.031550"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.014602" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:08.014736" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.013844" elapsed="0.001140">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.013753" elapsed="0.001335">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:07.981741" elapsed="0.033630">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:07.978752" elapsed="0.036761"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.016382" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18768 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.085050" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.085257" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.015890" elapsed="0.069421"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.085422" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:08.085886" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:07.978341" elapsed="0.107663"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.086559" elapsed="0.000917"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:07.977536" elapsed="0.110131"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:07.975721" elapsed="0.112184"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:07.975203" elapsed="0.112809"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.974202" elapsed="0.113936"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:07.973730" elapsed="0.114504"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.089410" level="INFO">${next} = 18769</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.088604" elapsed="0.000866"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.090740" level="INFO">${current_port} = 18769</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.089875" elapsed="0.001029"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:07.967900" elapsed="0.123136"/>
</kw>
<msg time="2026-08-15T23:57:08.091122" level="INFO">Repeating keyword, round 940/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.093688" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.093443" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.093400" elapsed="0.000465"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.094615" level="INFO">${current_Date} = 2026-08-15 23:57:08.094</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.094259" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.095733" level="INFO">${ellapsed_seconds} = 2562.243</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.095038" elapsed="0.000753"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.096565" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.095984" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.095942" elapsed="0.000805"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.092885" elapsed="0.004006"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.097460" level="INFO">${number} = 940</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.097096" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.098898" level="INFO">${number} = 940</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.098544" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.100907" level="INFO">${device-port} = 18769</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.100083" elapsed="0.000909"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.103616" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.137048" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.137268" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.103520" elapsed="0.033807"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.138234" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:08.138367" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.137492" elapsed="0.000979">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.137446" elapsed="0.001117">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.103075" elapsed="0.035789">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.102664" elapsed="0.036409"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.139935" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18769 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.219760" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.220101" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.139424" elapsed="0.080735"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.220303" elapsed="0.000115"/>
</return>
<msg time="2026-08-15T23:57:08.220844" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.102251" elapsed="0.118708"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.221576" elapsed="0.000950"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.101440" elapsed="0.121274"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.099612" elapsed="0.123348"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.099083" elapsed="0.123983"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.098100" elapsed="0.125094"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.097640" elapsed="0.125654"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.224520" level="INFO">${next} = 18770</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.223641" elapsed="0.000961"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.225963" level="INFO">${current_port} = 18770</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.225022" elapsed="0.001039"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.091545" elapsed="0.134645"/>
</kw>
<msg time="2026-08-15T23:57:08.226277" level="INFO">Repeating keyword, round 941/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.228898" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.228660" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.228615" elapsed="0.000348"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.229284" level="INFO">${current_Date} = 2026-08-15 23:57:08.229</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.229114" elapsed="0.000197"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.229782" level="INFO">${ellapsed_seconds} = 2562.108</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.229461" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.230154" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.229902" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.229883" elapsed="0.000350"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.228070" elapsed="0.002209"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.230789" level="INFO">${number} = 941</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.230424" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.232243" level="INFO">${number} = 941</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.231898" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.234261" level="INFO">${device-port} = 18770</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.233452" elapsed="0.000892"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.237169" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.265208" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.265435" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.236876" elapsed="0.028618"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.266413" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:08.266547" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.265656" elapsed="0.001094">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.265609" elapsed="0.001276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.236569" elapsed="0.030606">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.236158" elapsed="0.031159"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.268174" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18770 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.337043" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.337255" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.267660" elapsed="0.069649"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.337419" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:08.337862" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.235724" elapsed="0.102255"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.338534" elapsed="0.000869"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.234932" elapsed="0.104656"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.232997" elapsed="0.106780"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.232444" elapsed="0.107481"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.231439" elapsed="0.108613"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.230991" elapsed="0.109156"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.341294" level="INFO">${next} = 18771</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.340514" elapsed="0.000840"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.342604" level="INFO">${current_port} = 18771</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.341714" elapsed="0.000984"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.226730" elapsed="0.116169"/>
</kw>
<msg time="2026-08-15T23:57:08.342990" level="INFO">Repeating keyword, round 942/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.345479" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.345235" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.345192" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.346392" level="INFO">${current_Date} = 2026-08-15 23:57:08.346</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.346047" elapsed="0.000403"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.347486" level="INFO">${ellapsed_seconds} = 2561.991</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.346781" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.348254" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.347701" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.347660" elapsed="0.000830"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.344675" elapsed="0.003916"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.349339" level="INFO">${number} = 942</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.348967" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.350763" level="INFO">${number} = 942</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.350428" elapsed="0.000362"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.352753" level="INFO">${device-port} = 18771</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.351958" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.355304" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.388924" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.389183" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.355206" elapsed="0.034037"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.390174" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:08.390310" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.389413" elapsed="0.001004">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.389365" elapsed="0.001143">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.354927" elapsed="0.035855">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.354513" elapsed="0.036521"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.391927" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18771 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.461292" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.461593" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.391405" elapsed="0.070247"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.461794" elapsed="0.000135"/>
</return>
<msg time="2026-08-15T23:57:08.462313" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.354097" elapsed="0.108328"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.463081" elapsed="0.000982"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.353288" elapsed="0.111087"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.351486" elapsed="0.113095"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.350972" elapsed="0.113713"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.349984" elapsed="0.114896"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.349520" elapsed="0.115470"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.466202" level="INFO">${next} = 18772</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.465373" elapsed="0.000889"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.467544" level="INFO">${current_port} = 18772</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.466629" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.343408" elapsed="0.124358"/>
</kw>
<msg time="2026-08-15T23:57:08.467915" level="INFO">Repeating keyword, round 943/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.469791" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.469673" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.469650" elapsed="0.000223"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.470206" level="INFO">${current_Date} = 2026-08-15 23:57:08.470</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.470030" elapsed="0.000205"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.470727" level="INFO">${ellapsed_seconds} = 2561.867</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.470386" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.471111" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.470842" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.470821" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.469424" elapsed="0.001813"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.471748" level="INFO">${number} = 943</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.471384" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.473259" level="INFO">${number} = 943</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.472893" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.475297" level="INFO">${device-port} = 18772</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.474483" elapsed="0.000898"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.477916" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.512482" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.512607" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.477786" elapsed="0.034852"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.513557" elapsed="0.000082"/>
</kw>
<msg time="2026-08-15T23:57:08.513755" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.512728" elapsed="0.001320">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.512703" elapsed="0.001455">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.477506" elapsed="0.036949">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.477105" elapsed="0.037496"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.515482" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18772 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.581354" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.581573" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.514994" elapsed="0.066635"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.581742" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:57:08.582191" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.476662" elapsed="0.105643"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.582917" elapsed="0.000859"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.475848" elapsed="0.108160"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.474025" elapsed="0.110205"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.473455" elapsed="0.110879"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.472420" elapsed="0.112039"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.471948" elapsed="0.112606"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.585696" level="INFO">${next} = 18773</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.584944" elapsed="0.000812"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.587070" level="INFO">${current_port} = 18773</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.586173" elapsed="0.000996"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.468493" elapsed="0.118806"/>
</kw>
<msg time="2026-08-15T23:57:08.587386" level="INFO">Repeating keyword, round 944/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.589528" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.589395" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.589374" elapsed="0.000241"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.590042" level="INFO">${current_Date} = 2026-08-15 23:57:08.590</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.589855" elapsed="0.000218"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.590632" level="INFO">${ellapsed_seconds} = 2561.747</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.590260" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.591066" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.590746" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.590720" elapsed="0.000446"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.589111" elapsed="0.002105"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.591837" level="INFO">${number} = 944</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.591392" elapsed="0.000484"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.593564" level="INFO">${number} = 944</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.593166" elapsed="0.000428"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.595972" level="INFO">${device-port} = 18773</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.595018" elapsed="0.001071"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.598947" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.637251" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.637481" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.598843" elapsed="0.038697"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.638470" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:08.638606" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.637707" elapsed="0.001008">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.637660" elapsed="0.001177">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.598546" elapsed="0.040580">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.598148" elapsed="0.041197"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.640246" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18773 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.709716" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.710053" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.639698" elapsed="0.070418"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.710259" elapsed="0.000094"/>
</return>
<msg time="2026-08-15T23:57:08.710754" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.597679" elapsed="0.113252"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.711636" elapsed="0.001151"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.596693" elapsed="0.116368"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.594416" elapsed="0.118867"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.593784" elapsed="0.119616"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.592607" elapsed="0.120939"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.592058" elapsed="0.121605"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.715009" level="INFO">${next} = 18774</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.714104" elapsed="0.000970"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.716570" level="INFO">${current_port} = 18774</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.715475" elapsed="0.001205"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.587855" elapsed="0.129013"/>
</kw>
<msg time="2026-08-15T23:57:08.716937" level="INFO">Repeating keyword, round 945/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.718626" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.718466" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.718435" elapsed="0.000282"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.719182" level="INFO">${current_Date} = 2026-08-15 23:57:08.719</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.718949" elapsed="0.000274"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.719912" level="INFO">${ellapsed_seconds} = 2561.618</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.719432" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.720429" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.720047" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.720020" elapsed="0.000522"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.718119" elapsed="0.002487"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.721352" level="INFO">${number} = 945</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.720832" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.723440" level="INFO">${number} = 945</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.722947" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.726320" level="INFO">${device-port} = 18774</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.725186" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.729784" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.765871" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.766135" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.729675" elapsed="0.036518"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.767208" elapsed="0.000067"/>
</kw>
<msg time="2026-08-15T23:57:08.767355" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.766381" elapsed="0.001215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.766325" elapsed="0.001397">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.729388" elapsed="0.038742">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.728938" elapsed="0.039362"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.769302" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18774 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.837686" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.838048" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.768675" elapsed="0.069433"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.838259" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:57:08.838770" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.728286" elapsed="0.110642"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.839556" elapsed="0.001007"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.727093" elapsed="0.113666"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.724507" elapsed="0.116502"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.723700" elapsed="0.117414"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.722275" elapsed="0.118970"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.721620" elapsed="0.119726"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.842539" level="INFO">${next} = 18775</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.841699" elapsed="0.000902"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.843954" level="INFO">${current_port} = 18775</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.843010" elapsed="0.001057"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.717246" elapsed="0.126954"/>
</kw>
<msg time="2026-08-15T23:57:08.844288" level="INFO">Repeating keyword, round 946/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.846961" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.846672" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.846627" elapsed="0.000482"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.847940" level="INFO">${current_Date} = 2026-08-15 23:57:08.848</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.847539" elapsed="0.000465"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.849010" level="INFO">${ellapsed_seconds} = 2561.489</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.848387" elapsed="0.000650"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.849362" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.849109" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.849090" elapsed="0.000352"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.846125" elapsed="0.003363"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.850024" level="INFO">${number} = 946</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.849635" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.851530" level="INFO">${number} = 946</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.851167" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.853603" level="INFO">${device-port} = 18775</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.852759" elapsed="0.000927"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.856409" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:08.889653" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.889934" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.856140" elapsed="0.033857"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.890981" elapsed="0.000077"/>
</kw>
<msg time="2026-08-15T23:57:08.891141" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:08.890176" elapsed="0.001086">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:08.890124" elapsed="0.001233">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.855836" elapsed="0.035826">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.855410" elapsed="0.036532"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.892905" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18775 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:08.961620" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:08.961883" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.892355" elapsed="0.069588"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:08.962060" elapsed="0.000128"/>
</return>
<msg time="2026-08-15T23:57:08.962629" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.854991" elapsed="0.107771"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:08.963510" elapsed="0.001065"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.854164" elapsed="0.110603"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.852300" elapsed="0.112730"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.851725" elapsed="0.113420"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.850702" elapsed="0.114570"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.850240" elapsed="0.115132"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.966547" level="INFO">${next} = 18776</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.965722" elapsed="0.000884"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.968041" level="INFO">${current_port} = 18776</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:08.967097" elapsed="0.001045"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.844754" elapsed="0.123518"/>
</kw>
<msg time="2026-08-15T23:57:08.968360" level="INFO">Repeating keyword, round 947/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:08.970949" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:08.970670" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.970627" elapsed="0.000466"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.971769" level="INFO">${current_Date} = 2026-08-15 23:57:08.972</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:08.971415" elapsed="0.000446"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:08.972952" level="INFO">${ellapsed_seconds} = 2561.365</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:08.972217" elapsed="0.000794"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:08.973760" elapsed="0.000094"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:08.973169" elapsed="0.000767"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:08.973126" elapsed="0.000864"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:08.970135" elapsed="0.003959"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.975289" level="INFO">${number} = 947</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.974435" elapsed="0.000913"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.977731" level="INFO">${number} = 947</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.977387" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:08.979704" level="INFO">${device-port} = 18776</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:08.978932" elapsed="0.000854"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:08.982448" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.013376" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.013621" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:08.982196" elapsed="0.031486"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.014713" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:57:09.014889" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.013902" elapsed="0.001197">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.013849" elapsed="0.001352">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:08.981914" elapsed="0.033567">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:08.981499" elapsed="0.034126"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.016563" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18776 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.081405" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.081666" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.016049" elapsed="0.065677"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.081899" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:57:09.082363" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:08.981081" elapsed="0.101398"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.083194" elapsed="0.001203"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:08.980269" elapsed="0.104398"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:08.978461" elapsed="0.106455"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:08.977931" elapsed="0.107056"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.976770" elapsed="0.108318"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:08.975693" elapsed="0.109481"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.085955" level="INFO">${next} = 18777</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.085404" elapsed="0.000591"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.086779" level="INFO">${current_port} = 18777</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.086226" elapsed="0.000644"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:08.968789" elapsed="0.118170"/>
</kw>
<msg time="2026-08-15T23:57:09.087014" level="INFO">Repeating keyword, round 948/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.088737" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.088578" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.088551" elapsed="0.000332"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.089391" level="INFO">${current_Date} = 2026-08-15 23:57:09.089</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.089158" elapsed="0.000270"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.090117" level="INFO">${ellapsed_seconds} = 2561.248</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.089638" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.090594" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.090253" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.090228" elapsed="0.000476"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.088235" elapsed="0.002531"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.091509" level="INFO">${number} = 948</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.090995" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.093587" level="INFO">${number} = 948</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.093100" elapsed="0.000525"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.096485" level="INFO">${device-port} = 18777</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.095264" elapsed="0.001338"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.099375" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.133248" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.133492" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.099269" elapsed="0.034283"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.134601" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:09.134743" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.133729" elapsed="0.001165">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.133679" elapsed="0.001313">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.098820" elapsed="0.036488">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.098407" elapsed="0.037135"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.136509" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18777 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.205567" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.205790" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.135981" elapsed="0.069907"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.206006" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:57:09.206437" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.097989" elapsed="0.108560"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.207164" elapsed="0.000972"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.097174" elapsed="0.111164"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.094607" elapsed="0.113921"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.093866" elapsed="0.114763"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.092449" elapsed="0.116305"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.091762" elapsed="0.117135"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.210075" level="INFO">${next} = 18778</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.209249" elapsed="0.000887"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.211546" level="INFO">${current_port} = 18778</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.210496" elapsed="0.001181"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.087316" elapsed="0.124637"/>
</kw>
<msg time="2026-08-15T23:57:09.212073" level="INFO">Repeating keyword, round 949/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.214130" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.213969" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.213940" elapsed="0.000283"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.214672" level="INFO">${current_Date} = 2026-08-15 23:57:09.215</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.214436" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.215402" level="INFO">${ellapsed_seconds} = 2561.122</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.214946" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.215932" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.215540" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.215514" elapsed="0.000536"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.213564" elapsed="0.002559"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.216879" level="INFO">${number} = 949</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.216329" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.219025" level="INFO">${number} = 949</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.218466" elapsed="0.000599"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.222104" level="INFO">${device-port} = 18778</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.220909" elapsed="0.001309"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.225918" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.260851" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.261039" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.225778" elapsed="0.035326"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.262027" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:09.262164" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.261277" elapsed="0.001089">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.261227" elapsed="0.001240">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.225491" elapsed="0.037255">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.224754" elapsed="0.038197"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.263852" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18778 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.329867" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.330114" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.263305" elapsed="0.066868"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.330290" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:09.330710" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.224161" elapsed="0.106708"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.331479" elapsed="0.001055"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.222866" elapsed="0.109876"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.220179" elapsed="0.112814"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.219297" elapsed="0.113856"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.217776" elapsed="0.115521"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.217137" elapsed="0.116257"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.334593" level="INFO">${next} = 18779</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.333745" elapsed="0.000909"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.336155" level="INFO">${current_port} = 18779</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.335093" elapsed="0.001179"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.212561" elapsed="0.123847"/>
</kw>
<msg time="2026-08-15T23:57:09.336497" level="INFO">Repeating keyword, round 950/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.338358" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.338186" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.338159" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.339017" level="INFO">${current_Date} = 2026-08-15 23:57:09.339</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.338734" elapsed="0.000322"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.339829" level="INFO">${ellapsed_seconds} = 2560.998</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.339294" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.340330" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.339977" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.339951" elapsed="0.000493"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.337840" elapsed="0.002674"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.341292" level="INFO">${number} = 950</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.340724" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.343516" level="INFO">${number} = 950</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.343032" elapsed="0.000522"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.346071" level="INFO">${device-port} = 18779</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.345250" elapsed="0.000904"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.349000" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.381330" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.381561" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.348899" elapsed="0.032721"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.382576" elapsed="0.000081"/>
</kw>
<msg time="2026-08-15T23:57:09.382746" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.381791" elapsed="0.001106">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.381743" elapsed="0.001254">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.348593" elapsed="0.034684">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.348004" elapsed="0.035486"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.384414" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18779 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.453315" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.453573" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.383917" elapsed="0.069727"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.453780" elapsed="0.000154"/>
</return>
<msg time="2026-08-15T23:57:09.454339" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.347542" elapsed="0.106919"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.455116" elapsed="0.000993"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.346598" elapsed="0.109708"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.344600" elapsed="0.111903"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.343845" elapsed="0.112764"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.342235" elapsed="0.114499"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.341560" elapsed="0.115329"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.458120" level="INFO">${next} = 18780</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.457271" elapsed="0.000910"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.459465" level="INFO">${current_port} = 18780</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.458549" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.336994" elapsed="0.122757"/>
</kw>
<msg time="2026-08-15T23:57:09.459914" level="INFO">Repeating keyword, round 951/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.461588" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.461431" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.461403" elapsed="0.000277"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.462144" level="INFO">${current_Date} = 2026-08-15 23:57:09.462</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.461913" elapsed="0.000271"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.463132" level="INFO">${ellapsed_seconds} = 2560.875</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.462413" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.463637" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.463291" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.463263" elapsed="0.000514"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.461091" elapsed="0.002785"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.464613" level="INFO">${number} = 951</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.464095" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.466719" level="INFO">${number} = 951</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.466208" elapsed="0.000561"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.469628" level="INFO">${device-port} = 18780</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.468506" elapsed="0.001235"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.475601" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.504639" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.504916" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.475496" elapsed="0.029484"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.506024" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:57:09.506174" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.505161" elapsed="0.001223">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.505110" elapsed="0.001377">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.475200" elapsed="0.031658">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.472173" elapsed="0.034857"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.508018" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18780 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.572947" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.573179" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.507381" elapsed="0.065854"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.573355" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:57:09.573879" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.471540" elapsed="0.102463"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.574577" elapsed="0.001063"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.470391" elapsed="0.105501"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.467867" elapsed="0.108201"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.467041" elapsed="0.109131"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.465551" elapsed="0.110708"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.464893" elapsed="0.111430"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.577088" level="INFO">${next} = 18781</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.576544" elapsed="0.000592"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.577967" level="INFO">${current_port} = 18781</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.577373" elapsed="0.000656"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.460249" elapsed="0.117866"/>
</kw>
<msg time="2026-08-15T23:57:09.578182" level="INFO">Repeating keyword, round 952/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.579888" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.579695" elapsed="0.000253"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.579667" elapsed="0.000314"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.580738" level="INFO">${current_Date} = 2026-08-15 23:57:09.581</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.580492" elapsed="0.000284"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.581721" level="INFO">${ellapsed_seconds} = 2560.756</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.581023" elapsed="0.000737"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.582245" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.581886" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.581859" elapsed="0.000503"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.579328" elapsed="0.003099"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.583177" level="INFO">${number} = 952</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.582634" elapsed="0.000581"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.585283" level="INFO">${number} = 952</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.584769" elapsed="0.000561"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.588181" level="INFO">${device-port} = 18781</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.587008" elapsed="0.001257"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.591159" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.624918" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.625148" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.591057" elapsed="0.034151"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.626123" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:09.626260" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.625376" elapsed="0.000992">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.625328" elapsed="0.001134">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.590564" elapsed="0.036215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.590125" elapsed="0.037039"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.628283" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18781 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.692945" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.693193" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.627587" elapsed="0.065676"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.693388" elapsed="0.000084"/>
</return>
<msg time="2026-08-15T23:57:09.693880" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.589621" elapsed="0.104380"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.694580" elapsed="0.000999"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.588723" elapsed="0.107070"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.586339" elapsed="0.109674"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.585557" elapsed="0.110523"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.584129" elapsed="0.112033"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.583445" elapsed="0.112780"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.696961" level="INFO">${next} = 18782</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.696448" elapsed="0.000612"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.697883" level="INFO">${current_port} = 18782</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.697302" elapsed="0.000645"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.578469" elapsed="0.119560"/>
</kw>
<msg time="2026-08-15T23:57:09.698096" level="INFO">Repeating keyword, round 953/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.699747" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.699584" elapsed="0.000254"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.699553" elapsed="0.000321"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.700314" level="INFO">${current_Date} = 2026-08-15 23:57:09.700</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.700082" elapsed="0.000269"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.701039" level="INFO">${ellapsed_seconds} = 2560.637</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.700560" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.701522" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.701176" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.701149" elapsed="0.000488"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.699224" elapsed="0.002478"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.702449" level="INFO">${number} = 953</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.701928" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.704698" level="INFO">${number} = 953</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.704086" elapsed="0.000653"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.707854" level="INFO">${device-port} = 18782</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.706610" elapsed="0.001387"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.710766" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.740901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.741131" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.710475" elapsed="0.030713"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.742117" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:57:09.742255" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.741357" elapsed="0.001101">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.741309" elapsed="0.001248">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.710193" elapsed="0.032675">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.709766" elapsed="0.033331"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.744088" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18782 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.808926" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.809149" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.743470" elapsed="0.065735"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.809320" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:57:09.809736" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.709342" elapsed="0.100570"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.810497" elapsed="0.000912"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.708470" elapsed="0.103180"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.705788" elapsed="0.106107"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.704999" elapsed="0.107004"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.703386" elapsed="0.108767"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.702709" elapsed="0.109553"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.813522" level="INFO">${next} = 18783</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.812608" elapsed="0.000980"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.815047" level="INFO">${current_port} = 18783</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.814010" elapsed="0.001139"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.698388" elapsed="0.116895"/>
</kw>
<msg time="2026-08-15T23:57:09.815371" level="INFO">Repeating keyword, round 954/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.817265" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.817107" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.817078" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.817908" level="INFO">${current_Date} = 2026-08-15 23:57:09.818</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.817652" elapsed="0.000295"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.818600" level="INFO">${ellapsed_seconds} = 2560.519</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.818155" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.819099" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.818740" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.818713" elapsed="0.000501"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.816713" elapsed="0.002566"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.820050" level="INFO">${number} = 954</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.819503" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.822117" level="INFO">${number} = 954</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.821609" elapsed="0.000547"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.825157" level="INFO">${device-port} = 18783</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.823938" elapsed="0.001332"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.828696" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.860236" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.860472" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.828594" elapsed="0.031941"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.861505" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:09.861643" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.860706" elapsed="0.001048">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.860658" elapsed="0.001226">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.828310" elapsed="0.033880">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.827716" elapsed="0.034696"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.863361" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18783 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:09.928596" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.928866" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.862778" elapsed="0.066149"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:09.929047" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:09.929473" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.827086" elapsed="0.102509"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:09.930239" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.825944" elapsed="0.105366"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.823213" elapsed="0.108339"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.822397" elapsed="0.109257"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.820977" elapsed="0.110802"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.820307" elapsed="0.111621"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.933067" level="INFO">${next} = 18784</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.932275" elapsed="0.000857"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.934461" level="INFO">${current_port} = 18784</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:09.933536" elapsed="0.001023"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.815913" elapsed="0.118774"/>
</kw>
<msg time="2026-08-15T23:57:09.934772" level="INFO">Repeating keyword, round 955/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:09.936673" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:09.936564" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.936544" elapsed="0.000194"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.937059" level="INFO">${current_Date} = 2026-08-15 23:57:09.937</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:09.936900" elapsed="0.000193"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:09.937564" level="INFO">${ellapsed_seconds} = 2560.4</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:09.937247" elapsed="0.000344"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.937925" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:09.937665" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:09.937643" elapsed="0.000369"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:09.936322" elapsed="0.001736"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.938574" level="INFO">${number} = 955</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.938205" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.940063" level="INFO">${number} = 955</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.939701" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:09.942074" level="INFO">${device-port} = 18784</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:09.941271" elapsed="0.000884"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.944631" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:09.980598" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:09.980881" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.944525" elapsed="0.036421"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:09.981869" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:57:09.982007" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:09.981120" elapsed="0.001088">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:09.981071" elapsed="0.001237">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:09.944244" elapsed="0.038341">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:09.943850" elapsed="0.038878"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:09.983645" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18784 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.048908" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.049138" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:09.983113" elapsed="0.066082"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.049311" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:10.049758" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:09.943409" elapsed="0.106515"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.050509" elapsed="0.000968"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:09.942592" elapsed="0.109096"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:09.940792" elapsed="0.111219"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:09.940265" elapsed="0.111906"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.939227" elapsed="0.113097"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:09.938758" elapsed="0.113667"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.053673" level="INFO">${next} = 18785</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.052797" elapsed="0.000939"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.055195" level="INFO">${current_port} = 18785</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.054167" elapsed="0.001206"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:09.935256" elapsed="0.120279"/>
</kw>
<msg time="2026-08-15T23:57:10.055641" level="INFO">Repeating keyword, round 956/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.058483" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.058226" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.058181" elapsed="0.000449"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.059512" level="INFO">${current_Date} = 2026-08-15 23:57:10.059</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.059088" elapsed="0.000489"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.060307" level="INFO">${ellapsed_seconds} = 2560.278</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.059966" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.060666" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.060407" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.060388" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.057604" elapsed="0.003191"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.061350" level="INFO">${number} = 956</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.060970" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.062889" level="INFO">${number} = 956</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.062498" elapsed="0.000419"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.065031" level="INFO">${device-port} = 18785</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.064182" elapsed="0.000934"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.067771" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.100500" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.100731" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.067667" elapsed="0.033123"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.101722" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:10.101891" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.101008" elapsed="0.000997">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.100959" elapsed="0.001156">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.067383" elapsed="0.035017">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.066968" elapsed="0.035691"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.103586" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18785 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.178982" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.179205" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.103053" elapsed="0.076240"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.179409" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:10.179876" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.066498" elapsed="0.113494"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.180557" elapsed="0.000905"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.065616" elapsed="0.116036"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.063661" elapsed="0.118226"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.063083" elapsed="0.118910"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.062021" elapsed="0.120099"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.061537" elapsed="0.120681"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.183455" level="INFO">${next} = 18786</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.182582" elapsed="0.000934"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.184485" level="INFO">${current_port} = 18786</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.183926" elapsed="0.000619"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.056187" elapsed="0.128438"/>
</kw>
<msg time="2026-08-15T23:57:10.184680" level="INFO">Repeating keyword, round 957/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.186297" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.186142" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.186113" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.186829" level="INFO">${current_Date} = 2026-08-15 23:57:10.187</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.186589" elapsed="0.000281"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.187570" level="INFO">${ellapsed_seconds} = 2560.15</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.187080" elapsed="0.000527"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.188067" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.187706" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.187680" elapsed="0.000499"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.185780" elapsed="0.002463"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.188975" level="INFO">${number} = 957</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.188446" elapsed="0.000567"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.190999" level="INFO">${number} = 957</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.190502" elapsed="0.000534"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.193757" level="INFO">${device-port} = 18786</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.192651" elapsed="0.001243"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.196973" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.228948" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.229176" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.196868" elapsed="0.032368"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.230175" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:10.230309" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.229404" elapsed="0.001092">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.229357" elapsed="0.001239">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.196565" elapsed="0.034338">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.196180" elapsed="0.034872"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.231943" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18786 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.296961" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.297180" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.231423" elapsed="0.065812"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.297347" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:10.297763" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.195659" elapsed="0.102266"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.298486" elapsed="0.000946"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.194499" elapsed="0.105125"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.192030" elapsed="0.107825"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.191274" elapsed="0.108688"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.189869" elapsed="0.110218"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.189229" elapsed="0.110952"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.301318" level="INFO">${next} = 18787</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.300525" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.302636" level="INFO">${current_port} = 18787</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.301739" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.184991" elapsed="0.117936"/>
</kw>
<msg time="2026-08-15T23:57:10.303020" level="INFO">Repeating keyword, round 958/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.304982" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.304825" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.304779" elapsed="0.000291"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.305539" level="INFO">${current_Date} = 2026-08-15 23:57:10.305</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.305321" elapsed="0.000255"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.306231" level="INFO">${ellapsed_seconds} = 2560.032</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.305784" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.306694" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.306366" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.306340" elapsed="0.000486"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.304470" elapsed="0.002423"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.307636" level="INFO">${number} = 958</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.307103" elapsed="0.000569"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.309646" level="INFO">${number} = 958</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.309174" elapsed="0.000509"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.312451" level="INFO">${device-port} = 18787</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.311332" elapsed="0.001231"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.316264" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.348555" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.348836" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.316015" elapsed="0.032887"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.349842" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:57:10.349983" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.349082" elapsed="0.001010">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.349030" elapsed="0.001153">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.315537" elapsed="0.034921">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.314935" elapsed="0.035737"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.351628" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18787 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.416921" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.417145" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.351061" elapsed="0.066141"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.417317" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:57:10.417742" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.314333" elapsed="0.103561"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.418483" elapsed="0.000972"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.313212" elapsed="0.106433"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.310653" elapsed="0.109227"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.309932" elapsed="0.110055"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.308533" elapsed="0.111579"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.307910" elapsed="0.112302"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.421369" level="INFO">${next} = 18788</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.420557" elapsed="0.000871"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.422693" level="INFO">${current_port} = 18788</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.421792" elapsed="0.000995"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.303496" elapsed="0.119493"/>
</kw>
<msg time="2026-08-15T23:57:10.423142" level="INFO">Repeating keyword, round 959/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.425123" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.424971" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.424942" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.425635" level="INFO">${current_Date} = 2026-08-15 23:57:10.426</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.425415" elapsed="0.000257"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.426338" level="INFO">${ellapsed_seconds} = 2559.911</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.425900" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.426818" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.426471" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.426445" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.424608" elapsed="0.002387"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.427726" level="INFO">${number} = 959</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.427218" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.429729" level="INFO">${number} = 959</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.429261" elapsed="0.000505"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.432545" level="INFO">${device-port} = 18788</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.431423" elapsed="0.001233"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.436412" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.468684" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.468949" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.436145" elapsed="0.032865"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.469922" elapsed="0.000059"/>
</kw>
<msg time="2026-08-15T23:57:10.470060" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.469179" elapsed="0.001073">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.469131" elapsed="0.001220">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.435633" elapsed="0.034999">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.435042" elapsed="0.035730"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.471664" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18788 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.536634" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.536885" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.471180" elapsed="0.065764"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.537056" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:57:10.537461" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.434435" elapsed="0.103135"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.538169" elapsed="0.000902"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.433295" elapsed="0.105967"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.430734" elapsed="0.108715"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.430007" elapsed="0.109542"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.428617" elapsed="0.111055"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.428001" elapsed="0.111766"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.540951" level="INFO">${next} = 18789</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.540155" elapsed="0.000867"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.542305" level="INFO">${current_port} = 18789</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.541408" elapsed="0.000991"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.423671" elapsed="0.118857"/>
</kw>
<msg time="2026-08-15T23:57:10.542613" level="INFO">Repeating keyword, round 960/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.545288" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.545034" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.544982" elapsed="0.000451"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.546216" level="INFO">${current_Date} = 2026-08-15 23:57:10.546</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.545861" elapsed="0.000414"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.547374" level="INFO">${ellapsed_seconds} = 2559.791</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.546612" elapsed="0.000822"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.548076" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.547592" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.547551" elapsed="0.000606"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.544447" elapsed="0.003755"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.548710" level="INFO">${number} = 960</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.548348" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.550158" level="INFO">${number} = 960</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.549813" elapsed="0.000372"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.552237" level="INFO">${device-port} = 18789</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.551425" elapsed="0.000895"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.554962" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.592582" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.592844" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.554857" elapsed="0.038050"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.593781" elapsed="0.000086"/>
</kw>
<msg time="2026-08-15T23:57:10.593950" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.593077" elapsed="0.000979">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.593028" elapsed="0.001118">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.554407" elapsed="0.040020">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.554022" elapsed="0.040628"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.595602" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18789 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.660714" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.660963" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.595114" elapsed="0.065906"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.661130" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:57:10.661531" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.553583" elapsed="0.108058"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.662245" elapsed="0.000931"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.552763" elapsed="0.110602"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.550890" elapsed="0.112662"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.550349" elapsed="0.113304"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.549357" elapsed="0.114418"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.548908" elapsed="0.115015"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.665109" level="INFO">${next} = 18790</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.664278" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.666431" level="INFO">${current_port} = 18790</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.665528" elapsed="0.000998"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.543133" elapsed="0.123520"/>
</kw>
<msg time="2026-08-15T23:57:10.666738" level="INFO">Repeating keyword, round 961/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.669310" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.669066" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.669013" elapsed="0.000439"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.670164" level="INFO">${current_Date} = 2026-08-15 23:57:10.670</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.669787" elapsed="0.000436"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.671326" level="INFO">${ellapsed_seconds} = 2559.667</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.670549" elapsed="0.000837"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.672047" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.671545" elapsed="0.000559"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.671503" elapsed="0.000625"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.668492" elapsed="0.003681"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.672685" level="INFO">${number} = 961</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.672322" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.674131" level="INFO">${number} = 961</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.673777" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.676114" level="INFO">${device-port} = 18790</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.675326" elapsed="0.000867"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.678795" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.708413" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.708634" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.678698" elapsed="0.029996"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.709610" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:10.709742" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.708903" elapsed="0.001052">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.708852" elapsed="0.001205">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.678422" elapsed="0.031906">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.677863" elapsed="0.032605"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.711337" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18790 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.776629" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.776897" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.710839" elapsed="0.066117"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.777071" elapsed="0.000078"/>
</return>
<msg time="2026-08-15T23:57:10.777486" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.677425" elapsed="0.100169"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.778203" elapsed="0.000924"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.676624" elapsed="0.102697"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.674865" elapsed="0.104645"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.674320" elapsed="0.105292"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.673331" elapsed="0.106407"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.672886" elapsed="0.106994"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.781025" level="INFO">${next} = 18791</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.780232" elapsed="0.000854"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.782336" level="INFO">${current_port} = 18791</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.781445" elapsed="0.000985"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.667217" elapsed="0.115342"/>
</kw>
<msg time="2026-08-15T23:57:10.782645" level="INFO">Repeating keyword, round 962/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.785226" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.784980" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.784938" elapsed="0.000430"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.786149" level="INFO">${current_Date} = 2026-08-15 23:57:10.786</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.785768" elapsed="0.000440"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.787328" level="INFO">${ellapsed_seconds} = 2559.551</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.786542" elapsed="0.000858"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.788074" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.787560" elapsed="0.000593"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.787518" elapsed="0.000668"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.784420" elapsed="0.003830"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.788983" level="INFO">${number} = 962</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.788454" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.791027" level="INFO">${number} = 962</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.790506" elapsed="0.000560"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.793320" level="INFO">${device-port} = 18791</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.792519" elapsed="0.000882"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.796208" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.828435" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.828660" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.796111" elapsed="0.032608"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.829630" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:10.829763" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.828927" elapsed="0.000973">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.828876" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.795834" elapsed="0.034437">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.795250" elapsed="0.035226"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.831383" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18791 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:10.896703" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.896967" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.830895" elapsed="0.066130"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:10.897138" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:10.897548" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.794789" elapsed="0.102867"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:10.898311" elapsed="0.000930"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.794007" elapsed="0.105424"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.792060" elapsed="0.107562"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.791295" elapsed="0.108427"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.789886" elapsed="0.110004"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.789235" elapsed="0.110758"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.901145" level="INFO">${next} = 18792</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.900351" elapsed="0.000854"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.902477" level="INFO">${current_port} = 18792</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:10.901577" elapsed="0.000994"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.783155" elapsed="0.119544"/>
</kw>
<msg time="2026-08-15T23:57:10.902785" level="INFO">Repeating keyword, round 963/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:10.905464" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:10.905216" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.905171" elapsed="0.000435"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.906306" level="INFO">${current_Date} = 2026-08-15 23:57:10.906</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:10.905961" elapsed="0.000404"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:10.907534" level="INFO">${ellapsed_seconds} = 2559.431</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:10.906693" elapsed="0.000913"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.908163" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:10.907774" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:10.907724" elapsed="0.000528"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:10.904593" elapsed="0.003705"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.908847" level="INFO">${number} = 963</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.908453" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.910326" level="INFO">${number} = 963</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.909983" elapsed="0.000370"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:10.912350" level="INFO">${device-port} = 18792</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:10.911542" elapsed="0.000888"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.917631" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:10.952559" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:10.952788" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.917530" elapsed="0.035357"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:10.953890" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:57:10.954032" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:10.953074" elapsed="0.001204">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:10.953025" elapsed="0.001373">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:10.917233" elapsed="0.037468">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:10.914144" elapsed="0.040798"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:10.955849" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18792 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.020947" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.021181" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:10.955299" elapsed="0.065986"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.021415" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:57:11.022064" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:10.913692" elapsed="0.108484"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.022838" elapsed="0.000929"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:10.912895" elapsed="0.111119"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:10.911083" elapsed="0.113125"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:10.910511" elapsed="0.113811"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.909482" elapsed="0.114982"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:10.909033" elapsed="0.115531"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.025749" level="INFO">${next} = 18793</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.024954" elapsed="0.000904"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.027258" level="INFO">${current_port} = 18793</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.026237" elapsed="0.001122"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:10.903296" elapsed="0.124222"/>
</kw>
<msg time="2026-08-15T23:57:11.027609" level="INFO">Repeating keyword, round 964/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.030255" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.030097" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.030067" elapsed="0.000280"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.030891" level="INFO">${current_Date} = 2026-08-15 23:57:11.031</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.030611" elapsed="0.000319"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.031644" level="INFO">${ellapsed_seconds} = 2559.306</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.031187" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.032147" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.031783" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.031757" elapsed="0.000505"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.029440" elapsed="0.002887"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.033084" level="INFO">${number} = 964</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.032538" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.035187" level="INFO">${number} = 964</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.034651" elapsed="0.000575"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.038172" level="INFO">${device-port} = 18793</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.036928" elapsed="0.001360"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.041309" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.110317" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.110718" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.041207" elapsed="0.069589"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.112074" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:57:11.112225" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.111103" elapsed="0.001237">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.111026" elapsed="0.001417">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.040671" elapsed="0.072101">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.040277" elapsed="0.072782"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.114054" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18793 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.180999" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.181406" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.113461" elapsed="0.068019"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.181675" elapsed="0.000113"/>
</return>
<msg time="2026-08-15T23:57:11.182306" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.039840" elapsed="0.142588"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.183283" elapsed="0.001090"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.038998" elapsed="0.145581"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.036247" elapsed="0.148604"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.035450" elapsed="0.149514"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.034015" elapsed="0.151084"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.033340" elapsed="0.151862"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.186452" level="INFO">${next} = 18794</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.185561" elapsed="0.000952"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.188139" level="INFO">${current_port} = 18794</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.186974" elapsed="0.001268"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.028096" elapsed="0.160279"/>
</kw>
<msg time="2026-08-15T23:57:11.188463" level="INFO">Repeating keyword, round 965/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.191162" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.190991" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.190942" elapsed="0.000311"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.191698" level="INFO">${current_Date} = 2026-08-15 23:57:11.192</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.191461" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.192445" level="INFO">${ellapsed_seconds} = 2559.145</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.191980" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.192968" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.192584" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.192556" elapsed="0.000527"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.190341" elapsed="0.002807"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.193905" level="INFO">${number} = 965</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.193353" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.196040" level="INFO">${number} = 965</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.195515" elapsed="0.000566"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.198938" level="INFO">${device-port} = 18794</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.197737" elapsed="0.001335"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.203100" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.228958" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.229196" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.202524" elapsed="0.026733"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.230218" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:11.230353" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.229435" elapsed="0.001152">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.229380" elapsed="0.001369">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.202128" elapsed="0.028952">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.201464" elapsed="0.029768"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.232138" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18794 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.297777" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.298062" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.231607" elapsed="0.066511"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.298248" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:57:11.298732" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.200867" elapsed="0.098034"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.299486" elapsed="0.000958"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.199691" elapsed="0.100952"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.197097" elapsed="0.103807"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.196305" elapsed="0.104710"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.194871" elapsed="0.106276"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.194168" elapsed="0.107077"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.302501" level="INFO">${next} = 18795</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.301595" elapsed="0.001017"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.303648" level="INFO">${current_port} = 18795</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.303072" elapsed="0.000638"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.188990" elapsed="0.114803"/>
</kw>
<msg time="2026-08-15T23:57:11.303924" level="INFO">Repeating keyword, round 966/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.305543" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.305384" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.305357" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.306171" level="INFO">${current_Date} = 2026-08-15 23:57:11.306</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.305922" elapsed="0.000287"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.306911" level="INFO">${ellapsed_seconds} = 2559.031</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.306422" elapsed="0.000528"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.307409" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.307059" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.307028" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.305045" elapsed="0.002539"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.308354" level="INFO">${number} = 966</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.307789" elapsed="0.000604"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.310429" level="INFO">${number} = 966</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.309924" elapsed="0.000544"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.313371" level="INFO">${device-port} = 18795</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.312217" elapsed="0.001270"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.316581" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.349678" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.349885" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.316479" elapsed="0.033448"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.350569" elapsed="0.000039"/>
</kw>
<msg time="2026-08-15T23:57:11.350659" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.350050" elapsed="0.000680">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.350016" elapsed="0.000774">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.316180" elapsed="0.034823">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.315758" elapsed="0.035401"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.351727" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18795 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.417099" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.417331" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.351395" elapsed="0.065992"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.417502" elapsed="0.000079"/>
</return>
<msg time="2026-08-15T23:57:11.417985" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.315340" elapsed="0.102758"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.418694" elapsed="0.000908"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.314132" elapsed="0.105701"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.311529" elapsed="0.108511"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.310726" elapsed="0.109417"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.309278" elapsed="0.110991"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.308614" elapsed="0.111755"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.421513" level="INFO">${next} = 18796</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.420717" elapsed="0.000854"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.422922" level="INFO">${current_port} = 18796</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.421975" elapsed="0.001055"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.304222" elapsed="0.118960"/>
</kw>
<msg time="2026-08-15T23:57:11.423279" level="INFO">Repeating keyword, round 967/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.425847" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.425568" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.425525" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.426755" level="INFO">${current_Date} = 2026-08-15 23:57:11.427</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.426322" elapsed="0.000587"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.427501" level="INFO">${ellapsed_seconds} = 2558.91</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.427172" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.427864" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.427599" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.427579" elapsed="0.000365"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.425038" elapsed="0.002953"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.428504" level="INFO">${number} = 967</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.428138" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.429963" level="INFO">${number} = 967</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.429604" elapsed="0.000386"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.432048" level="INFO">${device-port} = 18796</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.431217" elapsed="0.000913"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.434668" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.465085" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.465550" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.434565" elapsed="0.031060"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.467110" elapsed="0.000080"/>
</kw>
<msg time="2026-08-15T23:57:11.467290" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.465968" elapsed="0.001631">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.465872" elapsed="0.001842">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.434256" elapsed="0.033860">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.433833" elapsed="0.034473"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.469363" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18796 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.532854" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.533115" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.468750" elapsed="0.064441"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.533318" elapsed="0.000096"/>
</return>
<msg time="2026-08-15T23:57:11.533835" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.433388" elapsed="0.100571"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.534612" elapsed="0.001077"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.432568" elapsed="0.103373"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.430717" elapsed="0.105425"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.430155" elapsed="0.106095"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.429157" elapsed="0.107228"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.428686" elapsed="0.107803"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.537837" level="INFO">${next} = 18797</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.536948" elapsed="0.000957"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.539298" level="INFO">${current_port} = 18797</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.538326" elapsed="0.001071"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.423707" elapsed="0.115825"/>
</kw>
<msg time="2026-08-15T23:57:11.539621" level="INFO">Repeating keyword, round 968/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.542490" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.542189" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.542145" elapsed="0.000497"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.543279" level="INFO">${current_Date} = 2026-08-15 23:57:11.543</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.543082" elapsed="0.000224"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.543824" level="INFO">${ellapsed_seconds} = 2558.794</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.543460" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.544197" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.543924" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.543905" elapsed="0.000372"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.541499" elapsed="0.002824"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.544862" level="INFO">${number} = 968</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.544473" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.546345" level="INFO">${number} = 968</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.545992" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.548397" level="INFO">${device-port} = 18797</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.547598" elapsed="0.000880"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.551004" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.588668" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.588932" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.550901" elapsed="0.038093"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.589910" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:11.590048" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.589165" elapsed="0.000990">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.589118" elapsed="0.001128">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.550591" elapsed="0.039959">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.550168" elapsed="0.040597"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.591653" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18797 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.656773" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.657020" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.591163" elapsed="0.065912"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.657187" elapsed="0.000099"/>
</return>
<msg time="2026-08-15T23:57:11.657621" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.549732" elapsed="0.107997"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.658342" elapsed="0.000926"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.548936" elapsed="0.110522"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.547143" elapsed="0.112507"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.546546" elapsed="0.113206"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.545506" elapsed="0.114417"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.545048" elapsed="0.114976"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.661170" level="INFO">${next} = 18798</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.660375" elapsed="0.000856"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.662521" level="INFO">${current_port} = 18798</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.661591" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.540097" elapsed="0.122649"/>
</kw>
<msg time="2026-08-15T23:57:11.662896" level="INFO">Repeating keyword, round 969/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.665540" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.665277" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.665231" elapsed="0.000451"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.666442" level="INFO">${current_Date} = 2026-08-15 23:57:11.666</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.666044" elapsed="0.000466"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.667303" level="INFO">${ellapsed_seconds} = 2558.671</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.666875" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.667640" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.667400" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.667381" elapsed="0.000339"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.664709" elapsed="0.003057"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.668293" level="INFO">${number} = 969</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.667927" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.669732" level="INFO">${number} = 969</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.669392" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.671750" level="INFO">${device-port} = 18798</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.670959" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.674313" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.708597" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.708860" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.674208" elapsed="0.034716"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.709831" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:57:11.709969" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.709091" elapsed="0.001067">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.709043" elapsed="0.001215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.673929" elapsed="0.036633">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.673511" elapsed="0.037196"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.711574" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18798 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.777093" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.777316" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.711087" elapsed="0.066286"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.777487" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:11.777947" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.673097" elapsed="0.104990"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.778716" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.672294" elapsed="0.107583"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.670479" elapsed="0.109620"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.669936" elapsed="0.110266"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.668939" elapsed="0.111386"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.668473" elapsed="0.111946"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.781606" level="INFO">${next} = 18799</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.780769" elapsed="0.000899"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.783075" level="INFO">${current_port} = 18799</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.782080" elapsed="0.001058"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.663435" elapsed="0.119786"/>
</kw>
<msg time="2026-08-15T23:57:11.783275" level="INFO">Repeating keyword, round 970/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.784983" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.784781" elapsed="0.000265"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.784753" elapsed="0.000325"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.785565" level="INFO">${current_Date} = 2026-08-15 23:57:11.785</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.785341" elapsed="0.000262"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.786299" level="INFO">${ellapsed_seconds} = 2558.552</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.785836" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.786774" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.786439" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.786413" elapsed="0.000496"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.784415" elapsed="0.002559"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.787709" level="INFO">${number} = 970</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.787190" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.789761" level="INFO">${number} = 970</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.789282" elapsed="0.000537"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.792670" level="INFO">${device-port} = 18799</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.791537" elapsed="0.001244"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.796243" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.828904" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.829148" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.795989" elapsed="0.033220"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.830143" elapsed="0.000060"/>
</kw>
<msg time="2026-08-15T23:57:11.830310" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.829376" elapsed="0.001070">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.829330" elapsed="0.001216">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.795637" elapsed="0.035218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.795222" elapsed="0.035868"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.831996" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18799 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:11.896904" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.897125" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.831469" elapsed="0.065712"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:11.897296" elapsed="0.000074"/>
</return>
<msg time="2026-08-15T23:57:11.897707" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.794669" elapsed="0.103192"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:11.898476" elapsed="0.000906"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.793461" elapsed="0.106116"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.790861" elapsed="0.108904"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.790045" elapsed="0.109873"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.788614" elapsed="0.111432"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.787985" elapsed="0.112159"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.901305" level="INFO">${next} = 18800</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.900493" elapsed="0.000872"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.902687" level="INFO">${current_port} = 18800</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:11.901727" elapsed="0.001058"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.783543" elapsed="0.119442"/>
</kw>
<msg time="2026-08-15T23:57:11.903074" level="INFO">Repeating keyword, round 971/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:11.905600" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:11.905357" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.905314" elapsed="0.000429"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.906528" level="INFO">${current_Date} = 2026-08-15 23:57:11.906</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:11.906112" elapsed="0.000478"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:11.907421" level="INFO">${ellapsed_seconds} = 2558.431</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:11.906957" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.907908" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:11.907555" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:11.907530" elapsed="0.000508"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:11.904792" elapsed="0.003309"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.908865" level="INFO">${number} = 971</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.908305" elapsed="0.000603"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.910913" level="INFO">${number} = 971</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.910416" elapsed="0.000535"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:11.913643" level="INFO">${device-port} = 18800</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:11.912546" elapsed="0.001208"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.917622" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:11.948579" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:11.948859" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.917269" elapsed="0.031669"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:11.949901" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:57:11.950045" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:11.949123" elapsed="0.001173">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:11.949072" elapsed="0.001332">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:11.916764" elapsed="0.033927">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:11.916215" elapsed="0.034657"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:11.951763" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18800 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.016514" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.016733" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:11.951234" elapsed="0.065557"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.016968" elapsed="0.000085"/>
</return>
<msg time="2026-08-15T23:57:12.017394" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:11.915604" elapsed="0.101902"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.018123" elapsed="0.000962"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:11.914418" elapsed="0.104864"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:11.911919" elapsed="0.107558"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:11.911168" elapsed="0.108416"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.909750" elapsed="0.109964"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:11.909128" elapsed="0.110725"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.021048" level="INFO">${next} = 18801</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.020208" elapsed="0.000905"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.022425" level="INFO">${current_port} = 18801</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.021481" elapsed="0.001046"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:11.903523" elapsed="0.119138"/>
</kw>
<msg time="2026-08-15T23:57:12.022749" level="INFO">Repeating keyword, round 972/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.025400" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.025146" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.025101" elapsed="0.000449"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.026410" level="INFO">${current_Date} = 2026-08-15 23:57:12.026</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.025992" elapsed="0.000481"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.027311" level="INFO">${ellapsed_seconds} = 2558.311</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.026849" elapsed="0.000491"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.027671" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.027413" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.027394" elapsed="0.000361"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.024519" elapsed="0.003300"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.028369" level="INFO">${number} = 972</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.027978" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.029914" level="INFO">${number} = 972</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.029539" elapsed="0.000408"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.032007" level="INFO">${device-port} = 18801</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.031198" elapsed="0.000894"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.034787" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.064828" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.065056" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.034681" elapsed="0.030435"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.066025" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:12.066208" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.065283" elapsed="0.001033">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.065237" elapsed="0.001170">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.034250" elapsed="0.032441">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.033791" elapsed="0.033136"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.067769" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18801 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.132741" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.133064" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.067284" elapsed="0.065843"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.133268" elapsed="0.000091"/>
</return>
<msg time="2026-08-15T23:57:12.133746" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.033375" elapsed="0.100532"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.134579" elapsed="0.001001"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.032537" elapsed="0.103244"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.030696" elapsed="0.105347"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.030122" elapsed="0.106042"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.029045" elapsed="0.107257"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.028554" elapsed="0.107856"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.137652" level="INFO">${next} = 18802</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.136790" elapsed="0.000925"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.139177" level="INFO">${current_port} = 18802</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.138182" elapsed="0.001099"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.023238" elapsed="0.116184"/>
</kw>
<msg time="2026-08-15T23:57:12.139518" level="INFO">Repeating keyword, round 973/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.142519" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.142236" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.142189" elapsed="0.000487"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.143284" level="INFO">${current_Date} = 2026-08-15 23:57:12.143</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.143088" elapsed="0.000222"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.143793" level="INFO">${ellapsed_seconds} = 2558.194</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.143459" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.144164" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.143910" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.143891" elapsed="0.000353"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.141560" elapsed="0.002728"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.144820" level="INFO">${number} = 973</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.144434" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.146302" level="INFO">${number} = 973</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.145934" elapsed="0.000394"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.148319" level="INFO">${device-port} = 18802</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.147511" elapsed="0.000890"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.151238" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.184582" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.184779" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.151134" elapsed="0.033706"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.185513" elapsed="0.000038"/>
</kw>
<msg time="2026-08-15T23:57:12.185600" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.184981" elapsed="0.000776">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.184941" elapsed="0.000903">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.150854" elapsed="0.035215">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.150238" elapsed="0.035926"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.186724" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18802 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.257714" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.258181" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.186400" elapsed="0.071849"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.258419" elapsed="0.000122"/>
</return>
<msg time="2026-08-15T23:57:12.259045" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.149771" elapsed="0.109398"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.259904" elapsed="0.001116"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.148874" elapsed="0.112358"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.147048" elapsed="0.114390"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.146488" elapsed="0.115062"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.145457" elapsed="0.116229"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.145005" elapsed="0.116781"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.263187" level="INFO">${next} = 18803</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.262257" elapsed="0.000993"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.264923" level="INFO">${current_port} = 18803</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.263640" elapsed="0.001417"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.140078" elapsed="0.125160"/>
</kw>
<msg time="2026-08-15T23:57:12.265350" level="INFO">Repeating keyword, round 974/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.268900" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.268580" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.268529" elapsed="0.000535"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.269962" level="INFO">${current_Date} = 2026-08-15 23:57:12.270</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.269538" elapsed="0.000590"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.271250" level="INFO">${ellapsed_seconds} = 2558.067</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.270566" elapsed="0.000711"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.271655" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.271350" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.271331" elapsed="0.000416"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.267776" elapsed="0.004041"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.272432" level="INFO">${number} = 974</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.271996" elapsed="0.000465"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.273944" level="INFO">${number} = 974</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.273564" elapsed="0.000412"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.276146" level="INFO">${device-port} = 18803</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.275325" elapsed="0.000905"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.279033" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.316690" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.316973" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.278924" elapsed="0.038109"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.318062" elapsed="0.000065"/>
</kw>
<msg time="2026-08-15T23:57:12.318210" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.317204" elapsed="0.001121">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.317157" elapsed="0.001263">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.278618" elapsed="0.040093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.278001" elapsed="0.040992"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.319897" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18803 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.384745" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.385153" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.319355" elapsed="0.065857"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.385374" elapsed="0.000108"/>
</return>
<msg time="2026-08-15T23:57:12.385971" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.277541" elapsed="0.108554"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.386746" elapsed="0.001123"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.276676" elapsed="0.111411"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.274856" elapsed="0.113452"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.274197" elapsed="0.114218"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.273107" elapsed="0.115441"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.272623" elapsed="0.116025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.389979" level="INFO">${next} = 18804</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.389096" elapsed="0.000955"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.391457" level="INFO">${current_port} = 18804</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.390425" elapsed="0.001130"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.266044" elapsed="0.125644"/>
</kw>
<msg time="2026-08-15T23:57:12.391778" level="INFO">Repeating keyword, round 975/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.394697" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.394422" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.394374" elapsed="0.000516"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.395421" level="INFO">${current_Date} = 2026-08-15 23:57:12.395</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.395210" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.396050" level="INFO">${ellapsed_seconds} = 2557.942</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.395635" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.396443" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.396153" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.396133" elapsed="0.000401"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.393662" elapsed="0.002938"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.397213" level="INFO">${number} = 975</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.396759" elapsed="0.000485"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.398790" level="INFO">${number} = 975</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.398436" elapsed="0.000397"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.400930" level="INFO">${device-port} = 18804</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.400098" elapsed="0.000922"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.406469" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.436949" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.437230" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.406360" elapsed="0.030933"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.438433" elapsed="0.000063"/>
</kw>
<msg time="2026-08-15T23:57:12.438578" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.437507" elapsed="0.001332">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.437438" elapsed="0.001510">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.406055" elapsed="0.033192">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.402785" elapsed="0.036611"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.440315" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18804 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.508772" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.509021" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.439769" elapsed="0.069306"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.509192" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:57:12.509631" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.402355" elapsed="0.107388"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.510389" elapsed="0.001072"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.401482" elapsed="0.110228"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.399585" elapsed="0.112415"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.399006" elapsed="0.113102"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.397954" elapsed="0.114285"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.397410" elapsed="0.114927"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.513523" level="INFO">${next} = 18805</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.512692" elapsed="0.000892"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.514994" level="INFO">${current_port} = 18805</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.514038" elapsed="0.001054"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.392310" elapsed="0.122934"/>
</kw>
<msg time="2026-08-15T23:57:12.515347" level="INFO">Repeating keyword, round 976/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.518010" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.517677" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.517634" elapsed="0.000499"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.518622" level="INFO">${current_Date} = 2026-08-15 23:57:12.518</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.518385" elapsed="0.000273"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.519354" level="INFO">${ellapsed_seconds} = 2557.819</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.518891" elapsed="0.000500"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.519867" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.519489" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.519464" elapsed="0.000516"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.517151" elapsed="0.002892"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.520757" level="INFO">${number} = 976</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.520247" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.522913" level="INFO">${number} = 976</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.522410" elapsed="0.000540"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.525706" level="INFO">${device-port} = 18805</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.524599" elapsed="0.001265"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.529647" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.565237" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.565460" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.529509" elapsed="0.036009"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.566462" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:12.566599" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.565683" elapsed="0.001022">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.565638" elapsed="0.001189">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.528782" elapsed="0.038330">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.528241" elapsed="0.039077"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.568189" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18805 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.636905" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.637268" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.567669" elapsed="0.069659"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.637492" elapsed="0.000110"/>
</return>
<msg time="2026-08-15T23:57:12.638126" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.527628" elapsed="0.110623"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.638966" elapsed="0.001006"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.526502" elapsed="0.113664"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.523968" elapsed="0.116394"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.523178" elapsed="0.117290"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.521675" elapsed="0.118923"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.521048" elapsed="0.119654"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.641981" level="INFO">${next} = 18806</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.641105" elapsed="0.000937"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.643349" level="INFO">${current_port} = 18806</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.642417" elapsed="0.001027"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.515786" elapsed="0.127789"/>
</kw>
<msg time="2026-08-15T23:57:12.643665" level="INFO">Repeating keyword, round 977/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.646312" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.646146" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.646113" elapsed="0.000292"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.646887" level="INFO">${current_Date} = 2026-08-15 23:57:12.647</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.646625" elapsed="0.000300"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.647594" level="INFO">${ellapsed_seconds} = 2557.69</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.647133" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.648106" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.647730" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.647702" elapsed="0.000515"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.645555" elapsed="0.002724"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.649017" level="INFO">${number} = 977</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.648481" elapsed="0.000574"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.651337" level="INFO">${number} = 977</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.650715" elapsed="0.000661"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.654195" level="INFO">${device-port} = 18806</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.653054" elapsed="0.001224"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.657093" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.688944" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.689135" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.656754" elapsed="0.032426"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.689955" elapsed="0.000046"/>
</kw>
<msg time="2026-08-15T23:57:12.690063" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.689321" elapsed="0.000954">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.689281" elapsed="0.001081">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.656471" elapsed="0.034125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.656067" elapsed="0.034641"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.691388" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18806 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.756992" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.757322" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.691015" elapsed="0.066367"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.757534" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:57:12.758111" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.655628" elapsed="0.102598"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.758910" elapsed="0.001001"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.654727" elapsed="0.105386"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.652385" elapsed="0.107925"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.651605" elapsed="0.108810"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.649942" elapsed="0.110603"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.649276" elapsed="0.111367"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.761971" level="INFO">${next} = 18807</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.761044" elapsed="0.000990"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.763447" level="INFO">${current_port} = 18807</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.762402" elapsed="0.001142"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.644213" elapsed="0.119460"/>
</kw>
<msg time="2026-08-15T23:57:12.763760" level="INFO">Repeating keyword, round 978/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.766312" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.766191" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.766168" elapsed="0.000211"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.766764" level="INFO">${current_Date} = 2026-08-15 23:57:12.767</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.766587" elapsed="0.000204"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.767293" level="INFO">${ellapsed_seconds} = 2557.57</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.766958" elapsed="0.000362"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.767646" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.767390" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.767371" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.765644" elapsed="0.002128"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.768312" level="INFO">${number} = 978</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.767937" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.769782" level="INFO">${number} = 978</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.769417" elapsed="0.000408"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.771967" level="INFO">${device-port} = 18807</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.771023" elapsed="0.001035"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.774586" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.805272" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.805622" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.774482" elapsed="0.031235"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.806913" elapsed="0.000062"/>
</kw>
<msg time="2026-08-15T23:57:12.807058" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.806001" elapsed="0.001168">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.805929" elapsed="0.001336">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.774204" elapsed="0.033359">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.773782" elapsed="0.034051"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.808744" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18807 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.876853" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.877117" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.808224" elapsed="0.068952"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.877310" elapsed="0.000095"/>
</return>
<msg time="2026-08-15T23:57:12.877880" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.773352" elapsed="0.104646"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.878609" elapsed="0.000971"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.772529" elapsed="0.107243"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.770538" elapsed="0.109483"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.769993" elapsed="0.110134"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.768966" elapsed="0.111289"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.768496" elapsed="0.111860"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.881540" level="INFO">${next} = 18808</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.880707" elapsed="0.000891"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.882630" level="INFO">${current_port} = 18808</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.882063" elapsed="0.000626"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.764301" elapsed="0.118471"/>
</kw>
<msg time="2026-08-15T23:57:12.882869" level="INFO">Repeating keyword, round 979/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:12.884536" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:12.884378" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.884349" elapsed="0.000278"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.885099" level="INFO">${current_Date} = 2026-08-15 23:57:12.885</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:12.884862" elapsed="0.000277"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:12.885838" level="INFO">${ellapsed_seconds} = 2557.452</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:12.885347" elapsed="0.000530"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.886324" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:12.885977" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:12.885949" elapsed="0.000487"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:12.884036" elapsed="0.002464"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.887238" level="INFO">${number} = 979</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.886704" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.889277" level="INFO">${number} = 979</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.888769" elapsed="0.000546"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.892122" level="INFO">${device-port} = 18808</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.890989" elapsed="0.001250"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.895360" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:12.924768" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.925131" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.895245" elapsed="0.029947"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:12.926322" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:57:12.926465" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:12.925420" elapsed="0.001291">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:12.925352" elapsed="0.001490">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:12.894956" elapsed="0.032197">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:12.894529" elapsed="0.032775"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:12.928236" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18808 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:12.992703" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:12.992993" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:12.927686" elapsed="0.065370"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:12.993197" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:57:12.993701" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:12.894100" elapsed="0.099767"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:12.994513" elapsed="0.001057"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:12.892896" elapsed="0.102884"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:12.890321" elapsed="0.105722"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:12.889540" elapsed="0.106616"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.888143" elapsed="0.108154"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:12.887494" elapsed="0.108908"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.997720" level="INFO">${next} = 18809</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:12.996784" elapsed="0.001003"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:12.999351" level="INFO">${current_port} = 18809</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:12.998258" elapsed="0.001219"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:12.883181" elapsed="0.116443"/>
</kw>
<msg time="2026-08-15T23:57:12.999720" level="INFO">Repeating keyword, round 980/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.002530" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.002406" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.002382" elapsed="0.000220"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.003041" level="INFO">${current_Date} = 2026-08-15 23:57:13.003</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.002840" elapsed="0.000235"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.003570" level="INFO">${ellapsed_seconds} = 2557.334</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.003233" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.003937" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.003667" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.003648" elapsed="0.000370"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.002009" elapsed="0.002055"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.004585" level="INFO">${number} = 980</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.004216" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.006067" level="INFO">${number} = 980</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.005702" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.008077" level="INFO">${device-port} = 18809</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.007275" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.010656" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.040613" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.040900" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.010545" elapsed="0.030420"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.041978" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:13.042121" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.041160" elapsed="0.001073">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.041103" elapsed="0.001226">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.010261" elapsed="0.032358">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.009856" elapsed="0.033032"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.043755" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18809 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.108964" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.109276" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.043257" elapsed="0.066081"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.109494" elapsed="0.000130"/>
</return>
<msg time="2026-08-15T23:57:13.110078" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.009407" elapsed="0.100786"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.110844" elapsed="0.000919"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.008594" elapsed="0.103395"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.006793" elapsed="0.105386"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.006254" elapsed="0.106027"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.005235" elapsed="0.107174"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.004770" elapsed="0.107736"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.113715" level="INFO">${next} = 18810</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.112893" elapsed="0.000881"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.115110" level="INFO">${current_port} = 18810</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.114194" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.000305" elapsed="0.115031"/>
</kw>
<msg time="2026-08-15T23:57:13.115424" level="INFO">Repeating keyword, round 981/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.118163" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.118002" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.117957" elapsed="0.000272"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.118556" level="INFO">${current_Date} = 2026-08-15 23:57:13.118</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.118381" elapsed="0.000204"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.119084" level="INFO">${ellapsed_seconds} = 2557.219</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.118734" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.119436" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.119181" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.119162" elapsed="0.000354"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.117386" elapsed="0.002175"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.120099" level="INFO">${number} = 981</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.119707" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.121553" level="INFO">${number} = 981</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.121199" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.123542" level="INFO">${device-port} = 18810</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.122743" elapsed="0.000879"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.126138" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.156764" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.157019" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.126025" elapsed="0.031053"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.158015" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:13.158151" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.157244" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.157199" elapsed="0.001272">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.125715" elapsed="0.033045">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.125307" elapsed="0.033629"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.159773" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18810 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.224691" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.225082" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.159287" elapsed="0.065871"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.225321" elapsed="0.000100"/>
</return>
<msg time="2026-08-15T23:57:13.225909" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.124888" elapsed="0.101144"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.226711" elapsed="0.001176"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.124082" elapsed="0.104036"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.122295" elapsed="0.106053"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.121745" elapsed="0.106732"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.120732" elapsed="0.107895"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.120282" elapsed="0.108453"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.230282" level="INFO">${next} = 18811</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.229216" elapsed="0.001135"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.231949" level="INFO">${current_port} = 18811</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.230880" elapsed="0.001181"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.116083" elapsed="0.116126"/>
</kw>
<msg time="2026-08-15T23:57:13.232304" level="INFO">Repeating keyword, round 982/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.234792" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.234624" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.234586" elapsed="0.000337"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.235450" level="INFO">${current_Date} = 2026-08-15 23:57:13.235</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.235210" elapsed="0.000280"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.236213" level="INFO">${ellapsed_seconds} = 2557.102</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.235704" elapsed="0.000548"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.236701" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.236353" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.236326" elapsed="0.000510"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.234262" elapsed="0.002655"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.237720" level="INFO">${number} = 982</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.237138" elapsed="0.000622"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.239874" level="INFO">${number} = 982</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.239365" elapsed="0.000555"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.242776" level="INFO">${device-port} = 18811</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.241603" elapsed="0.001337"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.246728" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.273098" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.273343" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.246440" elapsed="0.026964"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.274430" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:57:13.274575" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.273618" elapsed="0.001070">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.273565" elapsed="0.001270">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.246141" elapsed="0.029054">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.245486" elapsed="0.030002"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.276520" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18811 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.344872" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.345095" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.275980" elapsed="0.069171"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.345267" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:57:13.345720" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.244796" elapsed="0.101080"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.346484" elapsed="0.000991"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.243583" elapsed="0.104087"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.240949" elapsed="0.106961"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.240149" elapsed="0.107867"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.238688" elapsed="0.109454"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.238026" elapsed="0.110215"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.349441" level="INFO">${next} = 18812</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.348588" elapsed="0.000916"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.350546" level="INFO">${current_port} = 18812</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.349913" elapsed="0.000692"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.232846" elapsed="0.117841"/>
</kw>
<msg time="2026-08-15T23:57:13.350744" level="INFO">Repeating keyword, round 983/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.352411" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.352257" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.352230" elapsed="0.000271"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.352953" level="INFO">${current_Date} = 2026-08-15 23:57:13.353</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.352703" elapsed="0.000288"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.353673" level="INFO">${ellapsed_seconds} = 2556.984</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.353209" elapsed="0.000502"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.354173" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.353830" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.353784" elapsed="0.000500"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.351924" elapsed="0.002423"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.355082" level="INFO">${number} = 983</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.354549" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.357149" level="INFO">${number} = 983</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.356628" elapsed="0.000559"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.359990" level="INFO">${device-port} = 18812</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.358864" elapsed="0.001243"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.363514" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.397234" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.397489" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.363259" elapsed="0.034290"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.398477" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:13.398612" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.397718" elapsed="0.001119">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.397670" elapsed="0.001271">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.362969" elapsed="0.036251">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.362514" elapsed="0.036848"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.400218" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18812 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.469378" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.469670" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.399706" elapsed="0.070026"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.469917" elapsed="0.000104"/>
</return>
<msg time="2026-08-15T23:57:13.470402" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.361982" elapsed="0.108534"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.471183" elapsed="0.000979"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.360726" elapsed="0.111650"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.358212" elapsed="0.114369"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.357447" elapsed="0.115237"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.355983" elapsed="0.116873"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.355337" elapsed="0.117623"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.474171" level="INFO">${next} = 18813</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.473337" elapsed="0.000896"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.475579" level="INFO">${current_port} = 18813</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.474627" elapsed="0.001049"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.351101" elapsed="0.124767"/>
</kw>
<msg time="2026-08-15T23:57:13.475963" level="INFO">Repeating keyword, round 984/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.478464" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.478346" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.478323" elapsed="0.000206"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.478928" level="INFO">${current_Date} = 2026-08-15 23:57:13.479</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.478737" elapsed="0.000218"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.479443" level="INFO">${ellapsed_seconds} = 2556.858</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.479106" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.479824" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.479552" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.479530" elapsed="0.000379"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.477866" elapsed="0.002090"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.480484" level="INFO">${number} = 984</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.480104" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.482018" level="INFO">${number} = 984</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.481653" elapsed="0.000391"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.484149" level="INFO">${device-port} = 18813</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.483222" elapsed="0.001012"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.486969" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.521475" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.521713" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.486861" elapsed="0.034912"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.522768" elapsed="0.000090"/>
</kw>
<msg time="2026-08-15T23:57:13.522941" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.521997" elapsed="0.001052">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.521939" elapsed="0.001203">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.486399" elapsed="0.037028">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.485996" elapsed="0.037652"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.524566" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18813 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.593096" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.593346" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.524044" elapsed="0.069359"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.593518" elapsed="0.000075"/>
</return>
<msg time="2026-08-15T23:57:13.593979" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.485551" elapsed="0.108541"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.594655" elapsed="0.000989"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.484684" elapsed="0.111196"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.482740" elapsed="0.113350"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.482204" elapsed="0.113999"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.481157" elapsed="0.115174"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.480668" elapsed="0.115777"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.597712" level="INFO">${next} = 18814</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.596846" elapsed="0.000927"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.598741" level="INFO">${current_port} = 18814</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.598190" elapsed="0.000651"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.476445" elapsed="0.122481"/>
</kw>
<msg time="2026-08-15T23:57:13.598981" level="INFO">Repeating keyword, round 985/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.600575" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.600413" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.600386" elapsed="0.000279"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.601111" level="INFO">${current_Date} = 2026-08-15 23:57:13.601</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.600895" elapsed="0.000253"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.601838" level="INFO">${ellapsed_seconds} = 2556.736</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.601379" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.602304" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.601977" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.601951" elapsed="0.000462"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.600062" elapsed="0.002413"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.603232" level="INFO">${number} = 985</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.602676" elapsed="0.000593"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.605345" level="INFO">${number} = 985</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.604830" elapsed="0.000559"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.608187" level="INFO">${device-port} = 18814</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.607036" elapsed="0.001266"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.611641" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.658930" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.659166" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.611542" elapsed="0.047685"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.660187" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:57:13.660333" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.659403" elapsed="0.001125">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.659347" elapsed="0.001283">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.611257" elapsed="0.049702">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.610668" elapsed="0.050441"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.662043" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18814 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.729416" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.729682" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.661507" elapsed="0.068230"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.729909" elapsed="0.000093"/>
</return>
<msg time="2026-08-15T23:57:13.730364" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.610207" elapsed="0.120267"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.731116" elapsed="0.000945"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.608969" elapsed="0.123288"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.606362" elapsed="0.126091"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.605611" elapsed="0.126946"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.604182" elapsed="0.128504"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.603484" elapsed="0.129299"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.734026" level="INFO">${next} = 18815</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.733205" elapsed="0.000882"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.735402" level="INFO">${current_port} = 18815</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.734465" elapsed="0.001031"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.599253" elapsed="0.136372"/>
</kw>
<msg time="2026-08-15T23:57:13.735711" level="INFO">Repeating keyword, round 986/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.738696" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.738492" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.738452" elapsed="0.000387"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.739377" level="INFO">${current_Date} = 2026-08-15 23:57:13.739</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.739135" elapsed="0.000280"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.740159" level="INFO">${ellapsed_seconds} = 2556.598</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.739658" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.740686" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.740303" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.740270" elapsed="0.000636"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.738016" elapsed="0.002967"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.741762" level="INFO">${number} = 986</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.741215" elapsed="0.000618"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.743955" level="INFO">${number} = 986</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.743418" elapsed="0.000602"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.746975" level="INFO">${device-port} = 18815</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.745735" elapsed="0.001398"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.751120" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.785248" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.785481" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.751015" elapsed="0.034524"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.786478" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:13.786613" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.785708" elapsed="0.001014">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.785661" elapsed="0.001185">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.750625" elapsed="0.036552">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.749769" elapsed="0.037642"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.788328" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18815 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.853084" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.853503" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.787768" elapsed="0.065796"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.853737" elapsed="0.000165"/>
</return>
<msg time="2026-08-15T23:57:13.854356" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.749083" elapsed="0.105390"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.855210" elapsed="0.001043"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.747859" elapsed="0.108590"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.745043" elapsed="0.111600"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.744259" elapsed="0.112490"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.742702" elapsed="0.114219"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.742060" elapsed="0.114964"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.858259" level="INFO">${next} = 18816</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.857411" elapsed="0.000907"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.859635" level="INFO">${current_port} = 18816</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.858702" elapsed="0.001028"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.736356" elapsed="0.123577"/>
</kw>
<msg time="2026-08-15T23:57:13.860026" level="INFO">Repeating keyword, round 987/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.862696" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.862519" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.862488" elapsed="0.000357"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.863308" level="INFO">${current_Date} = 2026-08-15 23:57:13.863</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.863060" elapsed="0.000287"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.864047" level="INFO">${ellapsed_seconds} = 2556.474</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.863554" elapsed="0.000537"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.864546" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.864194" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.864168" elapsed="0.000494"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.862149" elapsed="0.002578"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.865537" level="INFO">${number} = 987</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.864950" elapsed="0.000624"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.867592" level="INFO">${number} = 987</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.867094" elapsed="0.000536"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.870631" level="INFO">${device-port} = 18816</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.869497" elapsed="0.001247"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.877749" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:13.905341" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.905557" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.877601" elapsed="0.028014"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.906535" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:13.906668" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:13.905777" elapsed="0.001130">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:13.905731" elapsed="0.001276">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.877173" elapsed="0.030122">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.873183" elapsed="0.034253"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.908290" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18816 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:13.977571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:13.977918" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.907778" elapsed="0.070203"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:13.978132" elapsed="0.000116"/>
</return>
<msg time="2026-08-15T23:57:13.978637" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.872525" elapsed="0.106222"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:13.979393" elapsed="0.000965"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.871389" elapsed="0.109159"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.868635" elapsed="0.112104"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.867891" elapsed="0.112995"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.866439" elapsed="0.114603"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.865790" elapsed="0.115354"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.982322" level="INFO">${next} = 18817</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.981497" elapsed="0.000885"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.983666" level="INFO">${current_port} = 18817</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:13.982749" elapsed="0.001011"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.860572" elapsed="0.123384"/>
</kw>
<msg time="2026-08-15T23:57:13.984045" level="INFO">Repeating keyword, round 988/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:13.986672" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:13.986421" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.986376" elapsed="0.000470"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.987637" level="INFO">${current_Date} = 2026-08-15 23:57:13.987</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:13.987274" elapsed="0.000422"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:13.988772" level="INFO">${ellapsed_seconds} = 2556.35</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:13.988062" elapsed="0.000799"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:13.989626" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:13.989069" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:13.988980" elapsed="0.000855"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:13.985881" elapsed="0.004060"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.990663" level="INFO">${number} = 988</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.990281" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.992168" level="INFO">${number} = 988</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.991754" elapsed="0.000441"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:13.994192" level="INFO">${device-port} = 18817</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:13.993383" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:13.996944" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.028872" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.028973" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:13.996842" elapsed="0.032177"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.029775" elapsed="0.000107"/>
</kw>
<msg time="2026-08-15T23:57:14.029970" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.029095" elapsed="0.000984">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.029074" elapsed="0.001098">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:13.996358" elapsed="0.034100">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:13.995970" elapsed="0.034700"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.031549" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18817 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.096892" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.097155" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.031062" elapsed="0.066149"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.097322" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:14.097721" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:13.995530" elapsed="0.102350"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.098483" elapsed="0.000920"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:13.994720" elapsed="0.104872"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:13.992912" elapsed="0.106866"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:13.992357" elapsed="0.107592"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.991311" elapsed="0.108768"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:13.990862" elapsed="0.109317"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.101381" level="INFO">${next} = 18818</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.100528" elapsed="0.000915"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.102732" level="INFO">${current_port} = 18818</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.101849" elapsed="0.001063"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:13.984515" elapsed="0.118536"/>
</kw>
<msg time="2026-08-15T23:57:14.103138" level="INFO">Repeating keyword, round 989/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.105457" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.105346" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.105324" elapsed="0.000198"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.105853" level="INFO">${current_Date} = 2026-08-15 23:57:14.106</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.105667" elapsed="0.000213"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.106436" level="INFO">${ellapsed_seconds} = 2556.231</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.106028" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.106773" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.106534" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.106515" elapsed="0.000355"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.104868" elapsed="0.002048"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.107428" level="INFO">${number} = 989</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.107061" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.108943" level="INFO">${number} = 989</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.108586" elapsed="0.000418"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.111016" level="INFO">${device-port} = 18818</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.110213" elapsed="0.000885"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.113750" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.148868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.149139" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.113483" elapsed="0.035717"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.150108" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:14.150241" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.149367" elapsed="0.001055">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.149322" elapsed="0.001199">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.113203" elapsed="0.037590">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.112767" elapsed="0.038199"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.151822" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18818 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.216850" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.217094" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.151314" elapsed="0.065836"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.217263" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:14.217661" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.112354" elapsed="0.105420"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.218381" elapsed="0.000878"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.111543" elapsed="0.107902"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.109738" elapsed="0.109895"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.109208" elapsed="0.110526"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.108072" elapsed="0.111828"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.107611" elapsed="0.112388"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.221150" level="INFO">${next} = 18819</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.220343" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.222457" level="INFO">${current_port} = 18819</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.221569" elapsed="0.000982"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.103564" elapsed="0.119114"/>
</kw>
<msg time="2026-08-15T23:57:14.222763" level="INFO">Repeating keyword, round 990/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.225257" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.225145" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.225106" elapsed="0.000215"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.225654" level="INFO">${current_Date} = 2026-08-15 23:57:14.226</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.225499" elapsed="0.000182"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.226192" level="INFO">${ellapsed_seconds} = 2556.111</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.225846" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.226634" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.226317" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.226293" elapsed="0.000461"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.224524" elapsed="0.002323"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.227566" level="INFO">${number} = 990</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.227073" elapsed="0.000533"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.229270" level="INFO">${number} = 990</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.228905" elapsed="0.000393"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.231326" level="INFO">${device-port} = 18819</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.230503" elapsed="0.000904"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.233956" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.264378" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.264599" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.233852" elapsed="0.030805"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.265610" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:14.265742" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.264855" elapsed="0.001026">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.264774" elapsed="0.001202">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.233543" elapsed="0.032713">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.233145" elapsed="0.033321"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.267329" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18819 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.336555" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.336762" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.266847" elapsed="0.070021"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.336986" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:14.337419" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.232671" elapsed="0.104856"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.338119" elapsed="0.000866"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.231873" elapsed="0.107297"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.230022" elapsed="0.109332"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.229462" elapsed="0.109996"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.228406" elapsed="0.111174"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.227845" elapsed="0.111829"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.340942" level="INFO">${next} = 18820</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.340074" elapsed="0.000939"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.342288" level="INFO">${current_port} = 18820</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.341380" elapsed="0.001002"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.223242" elapsed="0.119266"/>
</kw>
<msg time="2026-08-15T23:57:14.342593" level="INFO">Repeating keyword, round 991/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.345179" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.344919" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.344870" elapsed="0.000440"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.345642" level="INFO">${current_Date} = 2026-08-15 23:57:14.346</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.345474" elapsed="0.000196"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.346153" level="INFO">${ellapsed_seconds} = 2555.991</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.345834" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.346493" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.346250" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.346230" elapsed="0.000342"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.344304" elapsed="0.002314"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.347163" level="INFO">${number} = 991</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.346780" elapsed="0.000414"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.348616" level="INFO">${number} = 991</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.348275" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.350627" level="INFO">${device-port} = 18820</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.349848" elapsed="0.000859"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.353213" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.384644" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.384918" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.353110" elapsed="0.031873"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.385874" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:14.386007" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.385147" elapsed="0.001093">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.385102" elapsed="0.001253">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.352790" elapsed="0.033869">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.352391" elapsed="0.034443"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.387898" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18820 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.452589" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.452859" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.387383" elapsed="0.065541"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.453040" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:14.453444" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.351969" elapsed="0.101584"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.454151" elapsed="0.000871"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.351166" elapsed="0.104046"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.349376" elapsed="0.106021"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.348830" elapsed="0.106668"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.347810" elapsed="0.107811"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.347348" elapsed="0.108368"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.456919" level="INFO">${next} = 18821</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.456104" elapsed="0.000878"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.458225" level="INFO">${current_port} = 18821</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.457340" elapsed="0.000983"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.343038" elapsed="0.115425"/>
</kw>
<msg time="2026-08-15T23:57:14.458571" level="INFO">Repeating keyword, round 992/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.461200" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.460951" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.460903" elapsed="0.000390"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.461767" level="INFO">${current_Date} = 2026-08-15 23:57:14.462</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.461548" elapsed="0.000276"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.462467" level="INFO">${ellapsed_seconds} = 2555.875</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.462039" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.462954" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.462602" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.462576" elapsed="0.000492"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.460320" elapsed="0.002814"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.463878" level="INFO">${number} = 992</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.463338" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.465922" level="INFO">${number} = 992</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.465429" elapsed="0.000531"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.468658" level="INFO">${device-port} = 18821</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.467564" elapsed="0.001225"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.472311" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.500921" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.501021" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.472175" elapsed="0.028872"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.501839" elapsed="0.000061"/>
</kw>
<msg time="2026-08-15T23:57:14.501982" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.501122" elapsed="0.000966">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.501101" elapsed="0.001078">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.471698" elapsed="0.030750">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.471161" elapsed="0.031495"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.503556" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18821 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.573132" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.573347" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.503069" elapsed="0.070334"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.573515" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:14.573959" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.470541" elapsed="0.103530"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.574630" elapsed="0.000893"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.469424" elapsed="0.106291"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.466938" elapsed="0.109016"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.466186" elapsed="0.109871"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.464773" elapsed="0.111408"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.464134" elapsed="0.112143"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.577446" level="INFO">${next} = 18822</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.576624" elapsed="0.000883"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.578770" level="INFO">${current_port} = 18822</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.577920" elapsed="0.001020"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.459067" elapsed="0.120005"/>
</kw>
<msg time="2026-08-15T23:57:14.579159" level="INFO">Repeating keyword, round 993/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.581676" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.581437" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.581394" elapsed="0.000454"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.582513" level="INFO">${current_Date} = 2026-08-15 23:57:14.582</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.582175" elapsed="0.000398"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.583609" level="INFO">${ellapsed_seconds} = 2555.755</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.582933" elapsed="0.000734"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.584378" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.583855" elapsed="0.000645"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.583782" elapsed="0.000772"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.580897" elapsed="0.003757"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.585591" level="INFO">${number} = 993</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.585057" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.587037" level="INFO">${number} = 993</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.586679" elapsed="0.000384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.589035" level="INFO">${device-port} = 18822</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.588207" elapsed="0.000907"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.591560" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.625315" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.625555" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.591456" elapsed="0.034158"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.626523" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:14.626656" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.625779" elapsed="0.001096">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.625734" elapsed="0.001243">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.591178" elapsed="0.036072">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.590760" elapsed="0.036630"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.628251" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18822 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.697119" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.697333" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.627735" elapsed="0.069654"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.697502" elapsed="0.000072"/>
</return>
<msg time="2026-08-15T23:57:14.697948" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.590342" elapsed="0.107720"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.698619" elapsed="0.000884"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.589546" elapsed="0.110149"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.587736" elapsed="0.112198"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.587221" elapsed="0.112816"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.586233" elapsed="0.113929"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.585771" elapsed="0.114486"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.701407" level="INFO">${next} = 18823</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.700601" elapsed="0.000844"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.702234" level="INFO">${current_port} = 18823</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.701669" elapsed="0.000625"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.579580" elapsed="0.122796"/>
</kw>
<msg time="2026-08-15T23:57:14.702429" level="INFO">Repeating keyword, round 994/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.704021" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.703865" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.703837" elapsed="0.000273"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.704573" level="INFO">${current_Date} = 2026-08-15 23:57:14.704</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.704360" elapsed="0.000250"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.705296" level="INFO">${ellapsed_seconds} = 2555.633</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.704857" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.705758" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.705433" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.705408" elapsed="0.000482"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.703506" elapsed="0.002449"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.706665" level="INFO">${number} = 994</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.706160" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.708695" level="INFO">${number} = 994</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.708204" elapsed="0.000528"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.711476" level="INFO">${device-port} = 18823</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.710348" elapsed="0.001241"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.714748" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.748845" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.749077" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.714504" elapsed="0.034632"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.750074" elapsed="0.000058"/>
</kw>
<msg time="2026-08-15T23:57:14.750211" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.749331" elapsed="0.000987">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.749276" elapsed="0.001135">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.714227" elapsed="0.036452">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.713834" elapsed="0.037086"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.751773" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18823 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.817120" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.817335" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.751276" elapsed="0.066115"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.817504" elapsed="0.000073"/>
</return>
<msg time="2026-08-15T23:57:14.817957" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.713403" elapsed="0.104668"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.818630" elapsed="0.000880"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.712227" elapsed="0.107476"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.709693" elapsed="0.110248"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.708971" elapsed="0.111072"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.707558" elapsed="0.112609"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.706937" elapsed="0.113326"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.821432" level="INFO">${next} = 18824</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.820640" elapsed="0.000852"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.822760" level="INFO">${current_port} = 18824</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.821896" elapsed="0.001026"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.702692" elapsed="0.120359"/>
</kw>
<msg time="2026-08-15T23:57:14.823137" level="INFO">Repeating keyword, round 995/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.825708" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.825465" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.825423" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.826545" level="INFO">${current_Date} = 2026-08-15 23:57:14.826</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.826206" elapsed="0.000398"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.827638" level="INFO">${ellapsed_seconds} = 2555.511</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.826963" elapsed="0.000734"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.828408" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.827884" elapsed="0.000644"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.827839" elapsed="0.000811"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.824902" elapsed="0.003857"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.829625" level="INFO">${number} = 995</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.829121" elapsed="0.000530"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.831076" level="INFO">${number} = 995</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.830714" elapsed="0.000389"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.833054" level="INFO">${device-port} = 18824</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.832251" elapsed="0.000883"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.835697" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.868767" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.869027" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.835448" elapsed="0.033638"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.869992" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:14.870125" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.869253" elapsed="0.001062">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.869205" elapsed="0.001208">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.835175" elapsed="0.035507">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.834767" elapsed="0.036086"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.871682" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18824 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:14.936764" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.937017" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.871202" elapsed="0.065870"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:14.937182" elapsed="0.000077"/>
</return>
<msg time="2026-08-15T23:57:14.937584" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.834358" elapsed="0.103335"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:14.938296" elapsed="0.000867"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.833564" elapsed="0.105788"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.831779" elapsed="0.107761"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.831263" elapsed="0.108377"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.830265" elapsed="0.109498"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.829820" elapsed="0.110086"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.941248" level="INFO">${next} = 18825</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.940275" elapsed="0.001012"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.942080" level="INFO">${current_port} = 18825</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:14.941513" elapsed="0.000627"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.823557" elapsed="0.118664"/>
</kw>
<msg time="2026-08-15T23:57:14.942274" level="INFO">Repeating keyword, round 996/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:14.943838" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:14.943665" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.943632" elapsed="0.000296"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.944392" level="INFO">${current_Date} = 2026-08-15 23:57:14.944</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:14.944179" elapsed="0.000249"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:14.945100" level="INFO">${ellapsed_seconds} = 2555.393</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:14.944658" elapsed="0.000479"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.945565" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:14.945240" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:14.945212" elapsed="0.000463"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:14.943328" elapsed="0.002409"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.946468" level="INFO">${number} = 996</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.945960" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.948508" level="INFO">${number} = 996</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.948001" elapsed="0.000549"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:14.951272" level="INFO">${device-port} = 18825</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:14.950171" elapsed="0.001213"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.954931" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:14.988923" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:14.989145" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.954736" elapsed="0.034467"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:14.990128" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:14.990262" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:14.989367" elapsed="0.001001">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:14.989321" elapsed="0.001138">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:14.954303" elapsed="0.036420">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:14.953910" elapsed="0.037070"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:14.991839" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18825 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:15.061106" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.061315" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:14.991332" elapsed="0.070037"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:15.061479" elapsed="0.000071"/>
</return>
<msg time="2026-08-15T23:57:15.061923" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:14.953464" elapsed="0.108578"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:15.062599" elapsed="0.000881"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:14.952019" elapsed="0.111647"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:14.949510" elapsed="0.114385"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:14.948771" elapsed="0.115226"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.947358" elapsed="0.116760"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:14.946719" elapsed="0.117494"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.065397" level="INFO">${next} = 18826</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.064607" elapsed="0.000848"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.066697" level="INFO">${current_port} = 18826</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:15.065853" elapsed="0.000938"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:14.942542" elapsed="0.124446"/>
</kw>
<msg time="2026-08-15T23:57:15.067074" level="INFO">Repeating keyword, round 997/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:15.069649" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:15.069394" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.069351" elapsed="0.000441"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.070489" level="INFO">${current_Date} = 2026-08-15 23:57:15.070</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:15.070151" elapsed="0.000398"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.071590" level="INFO">${ellapsed_seconds} = 2555.267</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:15.070914" elapsed="0.000734"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.072372" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:15.071833" elapsed="0.000693"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.071762" elapsed="0.000819"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:15.068862" elapsed="0.003821"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.073926" level="INFO">${number} = 997</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.073051" elapsed="0.000936"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.077245" level="INFO">${number} = 997</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.076393" elapsed="0.000919"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.079368" level="INFO">${device-port} = 18826</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.078470" elapsed="0.000979"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.082061" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:15.109087" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.109326" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.081964" elapsed="0.027432"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.110294" elapsed="0.000056"/>
</kw>
<msg time="2026-08-15T23:57:15.110426" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:15.109559" elapsed="0.001045">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:15.109514" elapsed="0.001186">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:15.081667" elapsed="0.029341">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:15.081121" elapsed="0.030030"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.112001" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18826 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:15.177388" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.177598" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.111494" elapsed="0.066159"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:15.177762" elapsed="0.000106"/>
</return>
<msg time="2026-08-15T23:57:15.178200" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:15.080689" elapsed="0.097620"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:15.178905" elapsed="0.000828"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:15.079897" elapsed="0.100060"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:15.078024" elapsed="0.102122"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:15.077485" elapsed="0.102761"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.075363" elapsed="0.105054"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:15.074340" elapsed="0.106181"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.181652" level="INFO">${next} = 18827</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.180904" elapsed="0.000808"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.183002" level="INFO">${current_port} = 18827</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:15.182122" elapsed="0.000976"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.067505" elapsed="0.115721"/>
</kw>
<msg time="2026-08-15T23:57:15.183311" level="INFO">Repeating keyword, round 998/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:15.186045" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:15.185769" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.185727" elapsed="0.000460"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.186962" level="INFO">${current_Date} = 2026-08-15 23:57:15.187</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:15.186583" elapsed="0.000438"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.188073" level="INFO">${ellapsed_seconds} = 2555.15</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:15.187356" elapsed="0.000776"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.188890" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:15.188289" elapsed="0.000730"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.188249" elapsed="0.000825"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:15.185216" elapsed="0.003960"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.189784" level="INFO">${number} = 998</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.189422" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.191240" level="INFO">${number} = 998</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.190899" elapsed="0.000367"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.193237" level="INFO">${device-port} = 18827</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.192426" elapsed="0.000891"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.195986" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:15.228952" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.229173" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.195886" elapsed="0.033344"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.230134" elapsed="0.000057"/>
</kw>
<msg time="2026-08-15T23:57:15.230270" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:15.229393" elapsed="0.000981">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:15.229348" elapsed="0.001117">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:15.195581" elapsed="0.035163">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:15.195027" elapsed="0.035961"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.231888" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18827 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:15.301117" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.301326" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.231363" elapsed="0.070017"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:15.301488" elapsed="0.000076"/>
</return>
<msg time="2026-08-15T23:57:15.301938" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:15.194573" elapsed="0.107482"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:15.302608" elapsed="0.000883"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:15.193756" elapsed="0.109923"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:15.191960" elapsed="0.111951"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:15.191425" elapsed="0.112739"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.190434" elapsed="0.113877"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:15.189990" elapsed="0.114423"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.305545" level="INFO">${next} = 18828</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.304755" elapsed="0.000849"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.306910" level="INFO">${current_port} = 18828</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:15.306005" elapsed="0.001004"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.183768" elapsed="0.123368"/>
</kw>
<msg time="2026-08-15T23:57:15.307223" level="INFO">Repeating keyword, round 999/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:15.309778" elapsed="0.000064"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:15.309523" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.309481" elapsed="0.000471"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.310608" level="INFO">${current_Date} = 2026-08-15 23:57:15.310</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:15.310274" elapsed="0.000393"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.311707" level="INFO">${ellapsed_seconds} = 2555.027</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:15.311027" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.312541" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:15.311957" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.311913" elapsed="0.000807"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:15.308963" elapsed="0.003888"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.313672" level="INFO">${number} = 999</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.313192" elapsed="0.000506"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.315128" level="INFO">${number} = 999</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.314763" elapsed="0.000392"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.317145" level="INFO">${device-port} = 18828</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.316333" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.322067" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:15.353392" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.353784" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.321968" elapsed="0.031929"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.355122" elapsed="0.000066"/>
</kw>
<msg time="2026-08-15T23:57:15.355274" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:15.354160" elapsed="0.001368">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:15.354083" elapsed="0.001553">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:15.321657" elapsed="0.034329">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:15.318914" elapsed="0.037227"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.357146" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18828 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:15.421540" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.421757" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.356569" elapsed="0.065283"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:15.421975" elapsed="0.000083"/>
</return>
<msg time="2026-08-15T23:57:15.422431" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:15.318479" elapsed="0.104063"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:15.423160" elapsed="0.000983"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:15.317664" elapsed="0.106701"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:15.315860" elapsed="0.108703"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:15.315327" elapsed="0.109340"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.314309" elapsed="0.110528"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:15.313867" elapsed="0.111079"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.426141" level="INFO">${next} = 18829</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.425298" elapsed="0.000903"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.427503" level="INFO">${current_port} = 18829</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:15.426570" elapsed="0.001040"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.307641" elapsed="0.120099"/>
</kw>
<msg time="2026-08-15T23:57:15.427885" level="INFO">Repeating keyword, round 1000/1000.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-15T23:57:15.430479" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-15T23:57:15.430230" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.430186" elapsed="0.000436"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.431412" level="INFO">${current_Date} = 2026-08-15 23:57:15.431</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-15T23:57:15.431047" elapsed="0.000424"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-15T23:57:15.432607" level="INFO">${ellapsed_seconds} = 2554.906</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-15T23:57:15.431829" elapsed="0.000838"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.433398" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:15.432854" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-08-15T23:57:15.432783" elapsed="0.000707"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-15T23:57:15.429664" elapsed="0.003871"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.434065" level="INFO">${number} = 1000</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.433680" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.435507" level="INFO">${number} = 1000</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.435162" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.437559" level="INFO">${device-port} = 18829</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.436747" elapsed="0.000893"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.440359" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-15T23:57:15.476903" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.477008" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.440257" elapsed="0.036778"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.477698" elapsed="0.000055"/>
</kw>
<msg time="2026-08-15T23:57:15.477879" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-15T23:57:15.477113" elapsed="0.000875">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-15T23:57:15.477090" elapsed="0.000992">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-15T23:57:15.439744" elapsed="0.038608">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-15T23:57:15.439349" elapsed="0.039213"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-15T23:57:15.479430" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":18829 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-15T23:57:15.545542" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-15T23:57:15.545877" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-15T23:57:15.478945" elapsed="0.066992"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-15T23:57:15.546082" elapsed="0.000102"/>
</return>
<msg time="2026-08-15T23:57:15.546558" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-15T23:57:15.438924" elapsed="0.107745"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-15T23:57:15.547338" elapsed="0.000990"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-15T23:57:15.438109" elapsed="0.110411"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-15T23:57:15.436280" elapsed="0.112431"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-15T23:57:15.435694" elapsed="0.113169"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.434697" elapsed="0.114299"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-15T23:57:15.434247" elapsed="0.114849"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.550293" level="INFO">${next} = 18830</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.549482" elapsed="0.000870"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.551627" level="INFO">${current_port} = 18830</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-15T23:57:15.550713" elapsed="0.001009"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:57:15.428345" elapsed="0.123566"/>
</kw>
<arg>${count} times</arg>
<arg>NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device</arg>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the specified keyword multiple times.</doc>
<status status="PASS" start="2026-08-15T23:54:50.342783" elapsed="145.209249"/>
</kw>
<arg>NetconfKeywords__Wait_Device_Is_Up_And_Running</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-15T23:54:50.336650" elapsed="145.215542"/>
</kw>
<arg>${filename}</arg>
<arg>${device-count}</arg>
<arg>${debug}</arg>
<arg>${schemas}</arg>
<arg>${rpc_config}</arg>
<arg>${tool_options}</arg>
<arg>${java_options}</arg>
<arg>${mdsal}</arg>
<arg>log_response=${log_response}</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /tmp/junos_19.4R1 unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="PASS" start="2026-08-15T23:54:47.540492" elapsed="148.011820"/>
</kw>
<arg>debug=false</arg>
<arg>schemas=${schema_dir}</arg>
<arg>device-count=${devices}</arg>
<arg>log_response=False</arg>
<doc>Install and run testtool.</doc>
<status status="PASS" start="2026-08-15T23:54:46.289322" elapsed="149.263155"/>
</kw>
<status status="PASS" start="2026-08-15T23:54:46.289020" elapsed="149.263541"/>
</branch>
<branch type="ELSE">
<kw name="Start_Testtool" owner="NetconfKeywords">
<arg>${TESTTOOL_EXECUTABLE}</arg>
<arg>debug=false</arg>
<arg>schemas=${SCHEMAS}</arg>
<arg>device-count=${devices}</arg>
<arg>log_response=False</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /tmp/junos_19.4R1 unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="NOT RUN" start="2026-08-15T23:57:15.553313" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-08-15T23:57:15.552626" elapsed="0.000847"/>
</branch>
<status status="PASS" start="2026-08-15T23:54:46.289001" elapsed="149.264523"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.554734" level="INFO">${devices_to_configure} = 1000</msg>
<var>${devices_to_configure}</var>
<arg>${devices} - len(${device_names})</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.553884" elapsed="0.000909"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-15T23:57:15.555963" level="INFO">${first_id} = 1</msg>
<var>${first_id}</var>
<arg>len(${device_names}) + 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-15T23:57:15.555181" elapsed="0.000842"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-15T23:57:15.575824" elapsed="0.000443"/>
</kw>
<msg time="2026-08-15T23:57:15.576317" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:57:15.575446" elapsed="0.000926"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return True if vanadium is at least ${lower_bound},
return False otherwise.</doc>
<status status="PASS" start="2026-08-15T23:57:15.575056" elapsed="0.001390"/>
</kw>
<msg time="2026-08-15T23:57:15.576487" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-15T23:57:15.566256" elapsed="0.010274"/>
</kw>
<msg time="2026-08-15T23:57:15.576637" level="INFO">${use_node_encapsulation} = True</msg>
<var>${use_node_encapsulation}</var>
<arg>${True}</arg>
<arg>${False}</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-15T23:57:15.565854" elapsed="0.010872"/>
</kw>
<kw name="Configure Device Range" owner="TopologyNetconfNodes">
<msg time="2026-08-15T23:57:15.577463" level="INFO">Configure 1000 devices starting from 1 (at 10.30.171.185:17830)</msg>
<msg time="2026-08-15T23:57:15.843387" level="INFO">${device_names} = ['netconf-scaling-device-1', 'netconf-scaling-device-2', 'netconf-scaling-device-3', 'netconf-scaling-device-4', 'netconf-scaling-device-5', 'netconf-scaling-device-6', 'netconf-scaling-device-7', 'ne...</msg>
<var>${device_names}</var>
<arg>restconf_url=${restconf_url}</arg>
<arg>device_name_prefix=${DEVICE_NAME_BASE}</arg>
<arg>device_ipaddress=${TOOLS_SYSTEM_IP}</arg>
<arg>device_port=17830</arg>
<arg>device_count=${devices_to_configure}</arg>
<arg>use_node_encapsulation=${use_node_encapsulation}</arg>
<arg>first_device_id=${first_id}</arg>
<doc>Generate device_count names in format "$device_name_prefix-$i" and configure them into NETCONF topology at specified RESTCONF URL.
For example:</doc>
<status status="PASS" start="2026-08-15T23:57:15.576910" elapsed="0.266583"/>
</kw>
<kw name="Await Devices Connected" owner="TopologyNetconfNodes">
<msg time="2026-08-15T23:57:15.845333" level="INFO">Awaiting connection of ['netconf-scaling-device-1', 'netconf-scaling-device-2', 'netconf-scaling-device-3', 'netconf-scaling-device-4', 'netconf-scaling-device-5', 'netconf-scaling-device-6', 'netconf-scaling-device-7', 'netconf-scaling-device-8', 'netconf-scaling-device-9', 'netconf-scaling-device-10', 'netconf-scaling-device-11', 'netconf-scaling-device-12', 'netconf-scaling-device-13', 'netconf-scaling-device-14', 'netconf-scaling-device-15', 'netconf-scaling-device-16', 'netconf-scaling-device-17', 'netconf-scaling-device-18', 'netconf-scaling-device-19', 'netconf-scaling-device-20', 'netconf-scaling-device-21', 'netconf-scaling-device-22', 'netconf-scaling-device-23', 'netconf-scaling-device-24', 'netconf-scaling-device-25', 'netconf-scaling-device-26', 'netconf-scaling-device-27', 'netconf-scaling-device-28', 'netconf-scaling-device-29', 'netconf-scaling-device-30', 'netconf-scaling-device-31', 'netconf-scaling-device-32', 'netconf-scaling-device-33', 'netconf-scaling-device-34', 'netconf-scaling-device-35', 'netconf-scaling-device-36', 'netconf-scaling-device-37', 'netconf-scaling-device-38', 'netconf-scaling-device-39', 'netconf-scaling-device-40', 'netconf-scaling-device-41', 'netconf-scaling-device-42', 'netconf-scaling-device-43', 'netconf-scaling-device-44', 'netconf-scaling-device-45', 'netconf-scaling-device-46', 'netconf-scaling-device-47', 'netconf-scaling-device-48', 'netconf-scaling-device-49', 'netconf-scaling-device-50', 'netconf-scaling-device-51', 'netconf-scaling-device-52', 'netconf-scaling-device-53', 'netconf-scaling-device-54', 'netconf-scaling-device-55', 'netconf-scaling-device-56', 'netconf-scaling-device-57', 'netconf-scaling-device-58', 'netconf-scaling-device-59', 'netconf-scaling-device-60', 'netconf-scaling-device-61', 'netconf-scaling-device-62', 'netconf-scaling-device-63', 'netconf-scaling-device-64', 'netconf-scaling-device-65', 'netconf-scaling-device-66', 'netconf-scaling-device-67', 'netconf-scaling-device-68', 'netconf-scaling-device-69', 'netconf-scaling-device-70', 'netconf-scaling-device-71', 'netconf-scaling-device-72', 'netconf-scaling-device-73', 'netconf-scaling-device-74', 'netconf-scaling-device-75', 'netconf-scaling-device-76', 'netconf-scaling-device-77', 'netconf-scaling-device-78', 'netconf-scaling-device-79', 'netconf-scaling-device-80', 'netconf-scaling-device-81', 'netconf-scaling-device-82', 'netconf-scaling-device-83', 'netconf-scaling-device-84', 'netconf-scaling-device-85', 'netconf-scaling-device-86', 'netconf-scaling-device-87', 'netconf-scaling-device-88', 'netconf-scaling-device-89', 'netconf-scaling-device-90', 'netconf-scaling-device-91', 'netconf-scaling-device-92', 'netconf-scaling-device-93', 'netconf-scaling-device-94', 'netconf-scaling-device-95', 'netconf-scaling-device-96', 'netconf-scaling-device-97', 'netconf-scaling-device-98', 'netconf-scaling-device-99', 'netconf-scaling-device-100', 'netconf-scaling-device-101', 'netconf-scaling-device-102', 'netconf-scaling-device-103', 'netconf-scaling-device-104', 'netconf-scaling-device-105', 'netconf-scaling-device-106', 'netconf-scaling-device-107', 'netconf-scaling-device-108', 'netconf-scaling-device-109', 'netconf-scaling-device-110', 'netconf-scaling-device-111', 'netconf-scaling-device-112', 'netconf-scaling-device-113', 'netconf-scaling-device-114', 'netconf-scaling-device-115', 'netconf-scaling-device-116', 'netconf-scaling-device-117', 'netconf-scaling-device-118', 'netconf-scaling-device-119', 'netconf-scaling-device-120', 'netconf-scaling-device-121', 'netconf-scaling-device-122', 'netconf-scaling-device-123', 'netconf-scaling-device-124', 'netconf-scaling-device-125', 'netconf-scaling-device-126', 'netconf-scaling-device-127', 'netconf-scaling-device-128', 'netconf-scaling-device-129', 'netconf-scaling-device-130', 'netconf-scaling-device-131', 'netconf-scaling-device-132', 'netconf-scaling-device-133', 'netconf-scaling-device-134', 'netconf-scaling-device-135', 'netconf-scaling-device-136', 'netconf-scaling-device-137', 'netconf-scaling-device-138', 'netconf-scaling-device-139', 'netconf-scaling-device-140', 'netconf-scaling-device-141', 'netconf-scaling-device-142', 'netconf-scaling-device-143', 'netconf-scaling-device-144', 'netconf-scaling-device-145', 'netconf-scaling-device-146', 'netconf-scaling-device-147', 'netconf-scaling-device-148', 'netconf-scaling-device-149', 'netconf-scaling-device-150', 'netconf-scaling-device-151', 'netconf-scaling-device-152', 'netconf-scaling-device-153', 'netconf-scaling-device-154', 'netconf-scaling-device-155', 'netconf-scaling-device-156', 'netconf-scaling-device-157', 'netconf-scaling-device-158', 'netconf-scaling-device-159', 'netconf-scaling-device-160', 'netconf-scaling-device-161', 'netconf-scaling-device-162', 'netconf-scaling-device-163', 'netconf-scaling-device-164', 'netconf-scaling-device-165', 'netconf-scaling-device-166', 'netconf-scaling-device-167', 'netconf-scaling-device-168', 'netconf-scaling-device-169', 'netconf-scaling-device-170', 'netconf-scaling-device-171', 'netconf-scaling-device-172', 'netconf-scaling-device-173', 'netconf-scaling-device-174', 'netconf-scaling-device-175', 'netconf-scaling-device-176', 'netconf-scaling-device-177', 'netconf-scaling-device-178', 'netconf-scaling-device-179', 'netconf-scaling-device-180', 'netconf-scaling-device-181', 'netconf-scaling-device-182', 'netconf-scaling-device-183', 'netconf-scaling-device-184', 'netconf-scaling-device-185', 'netconf-scaling-device-186', 'netconf-scaling-device-187', 'netconf-scaling-device-188', 'netconf-scaling-device-189', 'netconf-scaling-device-190', 'netconf-scaling-device-191', 'netconf-scaling-device-192', 'netconf-scaling-device-193', 'netconf-scaling-device-194', 'netconf-scaling-device-195', 'netconf-scaling-device-196', 'netconf-scaling-device-197', 'netconf-scaling-device-198', 'netconf-scaling-device-199', 'netconf-scaling-device-200', 'netconf-scaling-device-201', 'netconf-scaling-device-202', 'netconf-scaling-device-203', 'netconf-scaling-device-204', 'netconf-scaling-device-205', 'netconf-scaling-device-206', 'netconf-scaling-device-207', 'netconf-scaling-device-208', 'netconf-scaling-device-209', 'netconf-scaling-device-210', 'netconf-scaling-device-211', 'netconf-scaling-device-212', 'netconf-scaling-device-213', 'netconf-scaling-device-214', 'netconf-scaling-device-215', 'netconf-scaling-device-216', 'netconf-scaling-device-217', 'netconf-scaling-device-218', 'netconf-scaling-device-219', 'netconf-scaling-device-220', 'netconf-scaling-device-221', 'netconf-scaling-device-222', 'netconf-scaling-device-223', 'netconf-scaling-device-224', 'netconf-scaling-device-225', 'netconf-scaling-device-226', 'netconf-scaling-device-227', 'netconf-scaling-device-228', 'netconf-scaling-device-229', 'netconf-scaling-device-230', 'netconf-scaling-device-231', 'netconf-scaling-device-232', 'netconf-scaling-device-233', 'netconf-scaling-device-234', 'netconf-scaling-device-235', 'netconf-scaling-device-236', 'netconf-scaling-device-237', 'netconf-scaling-device-238', 'netconf-scaling-device-239', 'netconf-scaling-device-240', 'netconf-scaling-device-241', 'netconf-scaling-device-242', 'netconf-scaling-device-243', 'netconf-scaling-device-244', 'netconf-scaling-device-245', 'netconf-scaling-device-246', 'netconf-scaling-device-247', 'netconf-scaling-device-248', 'netconf-scaling-device-249', 'netconf-scaling-device-250', 'netconf-scaling-device-251', 'netconf-scaling-device-252', 'netconf-scaling-device-253', 'netconf-scaling-device-254', 'netconf-scaling-device-255', 'netconf-scaling-device-256', 'netconf-scaling-device-257', 'netconf-scaling-device-258', 'netconf-scaling-device-259', 'netconf-scaling-device-260', 'netconf-scaling-device-261', 'netconf-scaling-device-262', 'netconf-scaling-device-263', 'netconf-scaling-device-264', 'netconf-scaling-device-265', 'netconf-scaling-device-266', 'netconf-scaling-device-267', 'netconf-scaling-device-268', 'netconf-scaling-device-269', 'netconf-scaling-device-270', 'netconf-scaling-device-271', 'netconf-scaling-device-272', 'netconf-scaling-device-273', 'netconf-scaling-device-274', 'netconf-scaling-device-275', 'netconf-scaling-device-276', 'netconf-scaling-device-277', 'netconf-scaling-device-278', 'netconf-scaling-device-279', 'netconf-scaling-device-280', 'netconf-scaling-device-281', 'netconf-scaling-device-282', 'netconf-scaling-device-283', 'netconf-scaling-device-284', 'netconf-scaling-device-285', 'netconf-scaling-device-286', 'netconf-scaling-device-287', 'netconf-scaling-device-288', 'netconf-scaling-device-289', 'netconf-scaling-device-290', 'netconf-scaling-device-291', 'netconf-scaling-device-292', 'netconf-scaling-device-293', 'netconf-scaling-device-294', 'netconf-scaling-device-295', 'netconf-scaling-device-296', 'netconf-scaling-device-297', 'netconf-scaling-device-298', 'netconf-scaling-device-299', 'netconf-scaling-device-300', 'netconf-scaling-device-301', 'netconf-scaling-device-302', 'netconf-scaling-device-303', 'netconf-scaling-device-304', 'netconf-scaling-device-305', 'netconf-scaling-device-306', 'netconf-scaling-device-307', 'netconf-scaling-device-308', 'netconf-scaling-device-309', 'netconf-scaling-device-310', 'netconf-scaling-device-311', 'netconf-scaling-device-312', 'netconf-scaling-device-313', 'netconf-scaling-device-314', 'netconf-scaling-device-315', 'netconf-scaling-device-316', 'netconf-scaling-device-317', 'netconf-scaling-device-318', 'netconf-scaling-device-319', 'netconf-scaling-device-320', 'netconf-scaling-device-321', 'netconf-scaling-device-322', 'netconf-scaling-device-323', 'netconf-scaling-device-324', 'netconf-scaling-device-325', 'netconf-scaling-device-326', 'netconf-scaling-device-327', 'netconf-scaling-device-328', 'netconf-scaling-device-329', 'netconf-scaling-device-330', 'netconf-scaling-device-331', 'netconf-scaling-device-332', 'netconf-scaling-device-333', 'netconf-scaling-device-334', 'netconf-scaling-device-335', 'netconf-scaling-device-336', 'netconf-scaling-device-337', 'netconf-scaling-device-338', 'netconf-scaling-device-339', 'netconf-scaling-device-340', 'netconf-scaling-device-341', 'netconf-scaling-device-342', 'netconf-scaling-device-343', 'netconf-scaling-device-344', 'netconf-scaling-device-345', 'netconf-scaling-device-346', 'netconf-scaling-device-347', 'netconf-scaling-device-348', 'netconf-scaling-device-349', 'netconf-scaling-device-350', 'netconf-scaling-device-351', 'netconf-scaling-device-352', 'netconf-scaling-device-353', 'netconf-scaling-device-354', 'netconf-scaling-device-355', 'netconf-scaling-device-356', 'netconf-scaling-device-357', 'netconf-scaling-device-358', 'netconf-scaling-device-359', 'netconf-scaling-device-360', 'netconf-scaling-device-361', 'netconf-scaling-device-362', 'netconf-scaling-device-363', 'netconf-scaling-device-364', 'netconf-scaling-device-365', 'netconf-scaling-device-366', 'netconf-scaling-device-367', 'netconf-scaling-device-368', 'netconf-scaling-device-369', 'netconf-scaling-device-370', 'netconf-scaling-device-371', 'netconf-scaling-device-372', 'netconf-scaling-device-373', 'netconf-scaling-device-374', 'netconf-scaling-device-375', 'netconf-scaling-device-376', 'netconf-scaling-device-377', 'netconf-scaling-device-378', 'netconf-scaling-device-379', 'netconf-scaling-device-380', 'netconf-scaling-device-381', 'netconf-scaling-device-382', 'netconf-scaling-device-383', 'netconf-scaling-device-384', 'netconf-scaling-device-385', 'netconf-scaling-device-386', 'netconf-scaling-device-387', 'netconf-scaling-device-388', 'netconf-scaling-device-389', 'netconf-scaling-device-390', 'netconf-scaling-device-391', 'netconf-scaling-device-392', 'netconf-scaling-device-393', 'netconf-scaling-device-394', 'netconf-scaling-device-395', 'netconf-scaling-device-396', 'netconf-scaling-device-397', 'netconf-scaling-device-398', 'netconf-scaling-device-399', 'netconf-scaling-device-400', 'netconf-scaling-device-401', 'netconf-scaling-device-402', 'netconf-scaling-device-403', 'netconf-scaling-device-404', 'netconf-scaling-device-405', 'netconf-scaling-device-406', 'netconf-scaling-device-407', 'netconf-scaling-device-408', 'netconf-scaling-device-409', 'netconf-scaling-device-410', 'netconf-scaling-device-411', 'netconf-scaling-device-412', 'netconf-scaling-device-413', 'netconf-scaling-device-414', 'netconf-scaling-device-415', 'netconf-scaling-device-416', 'netconf-scaling-device-417', 'netconf-scaling-device-418', 'netconf-scaling-device-419', 'netconf-scaling-device-420', 'netconf-scaling-device-421', 'netconf-scaling-device-422', 'netconf-scaling-device-423', 'netconf-scaling-device-424', 'netconf-scaling-device-425', 'netconf-scaling-device-426', 'netconf-scaling-device-427', 'netconf-scaling-device-428', 'netconf-scaling-device-429', 'netconf-scaling-device-430', 'netconf-scaling-device-431', 'netconf-scaling-device-432', 'netconf-scaling-device-433', 'netconf-scaling-device-434', 'netconf-scaling-device-435', 'netconf-scaling-device-436', 'netconf-scaling-device-437', 'netconf-scaling-device-438', 'netconf-scaling-device-439', 'netconf-scaling-device-440', 'netconf-scaling-device-441', 'netconf-scaling-device-442', 'netconf-scaling-device-443', 'netconf-scaling-device-444', 'netconf-scaling-device-445', 'netconf-scaling-device-446', 'netconf-scaling-device-447', 'netconf-scaling-device-448', 'netconf-scaling-device-449', 'netconf-scaling-device-450', 'netconf-scaling-device-451', 'netconf-scaling-device-452', 'netconf-scaling-device-453', 'netconf-scaling-device-454', 'netconf-scaling-device-455', 'netconf-scaling-device-456', 'netconf-scaling-device-457', 'netconf-scaling-device-458', 'netconf-scaling-device-459', 'netconf-scaling-device-460', 'netconf-scaling-device-461', 'netconf-scaling-device-462', 'netconf-scaling-device-463', 'netconf-scaling-device-464', 'netconf-scaling-device-465', 'netconf-scaling-device-466', 'netconf-scaling-device-467', 'netconf-scaling-device-468', 'netconf-scaling-device-469', 'netconf-scaling-device-470', 'netconf-scaling-device-471', 'netconf-scaling-device-472', 'netconf-scaling-device-473', 'netconf-scaling-device-474', 'netconf-scaling-device-475', 'netconf-scaling-device-476', 'netconf-scaling-device-477', 'netconf-scaling-device-478', 'netconf-scaling-device-479', 'netconf-scaling-device-480', 'netconf-scaling-device-481', 'netconf-scaling-device-482', 'netconf-scaling-device-483', 'netconf-scaling-device-484', 'netconf-scaling-device-485', 'netconf-scaling-device-486', 'netconf-scaling-device-487', 'netconf-scaling-device-488', 'netconf-scaling-device-489', 'netconf-scaling-device-490', 'netconf-scaling-device-491', 'netconf-scaling-device-492', 'netconf-scaling-device-493', 'netconf-scaling-device-494', 'netconf-scaling-device-495', 'netconf-scaling-device-496', 'netconf-scaling-device-497', 'netconf-scaling-device-498', 'netconf-scaling-device-499', 'netconf-scaling-device-500', 'netconf-scaling-device-501', 'netconf-scaling-device-502', 'netconf-scaling-device-503', 'netconf-scaling-device-504', 'netconf-scaling-device-505', 'netconf-scaling-device-506', 'netconf-scaling-device-507', 'netconf-scaling-device-508', 'netconf-scaling-device-509', 'netconf-scaling-device-510', 'netconf-scaling-device-511', 'netconf-scaling-device-512', 'netconf-scaling-device-513', 'netconf-scaling-device-514', 'netconf-scaling-device-515', 'netconf-scaling-device-516', 'netconf-scaling-device-517', 'netconf-scaling-device-518', 'netconf-scaling-device-519', 'netconf-scaling-device-520', 'netconf-scaling-device-521', 'netconf-scaling-device-522', 'netconf-scaling-device-523', 'netconf-scaling-device-524', 'netconf-scaling-device-525', 'netconf-scaling-device-526', 'netconf-scaling-device-527', 'netconf-scaling-device-528', 'netconf-scaling-device-529', 'netconf-scaling-device-530', 'netconf-scaling-device-531', 'netconf-scaling-device-532', 'netconf-scaling-device-533', 'netconf-scaling-device-534', 'netconf-scaling-device-535', 'netconf-scaling-device-536', 'netconf-scaling-device-537', 'netconf-scaling-device-538', 'netconf-scaling-device-539', 'netconf-scaling-device-540', 'netconf-scaling-device-541', 'netconf-scaling-device-542', 'netconf-scaling-device-543', 'netconf-scaling-device-544', 'netconf-scaling-device-545', 'netconf-scaling-device-546', 'netconf-scaling-device-547', 'netconf-scaling-device-548', 'netconf-scaling-device-549', 'netconf-scaling-device-550', 'netconf-scaling-device-551', 'netconf-scaling-device-552', 'netconf-scaling-device-553', 'netconf-scaling-device-554', 'netconf-scaling-device-555', 'netconf-scaling-device-556', 'netconf-scaling-device-557', 'netconf-scaling-device-558', 'netconf-scaling-device-559', 'netconf-scaling-device-560', 'netconf-scaling-device-561', 'netconf-scaling-device-562', 'netconf-scaling-device-563', 'netconf-scaling-device-564', 'netconf-scaling-device-565', 'netconf-scaling-device-566', 'netconf-scaling-device-567', 'netconf-scaling-device-568', 'netconf-scaling-device-569', 'netconf-scaling-device-570', 'netconf-scaling-device-571', 'netconf-scaling-device-572', 'netconf-scaling-device-573', 'netconf-scaling-device-574', 'netconf-scaling-device-575', 'netconf-scaling-device-576', 'netconf-scaling-device-577', 'netconf-scaling-device-578', 'netconf-scaling-device-579', 'netconf-scaling-device-580', 'netconf-scaling-device-581', 'netconf-scaling-device-582', 'netconf-scaling-device-583', 'netconf-scaling-device-584', 'netconf-scaling-device-585', 'netconf-scaling-device-586', 'netconf-scaling-device-587', 'netconf-scaling-device-588', 'netconf-scaling-device-589', 'netconf-scaling-device-590', 'netconf-scaling-device-591', 'netconf-scaling-device-592', 'netconf-scaling-device-593', 'netconf-scaling-device-594', 'netconf-scaling-device-595', 'netconf-scaling-device-596', 'netconf-scaling-device-597', 'netconf-scaling-device-598', 'netconf-scaling-device-599', 'netconf-scaling-device-600', 'netconf-scaling-device-601', 'netconf-scaling-device-602', 'netconf-scaling-device-603', 'netconf-scaling-device-604', 'netconf-scaling-device-605', 'netconf-scaling-device-606', 'netconf-scaling-device-607', 'netconf-scaling-device-608', 'netconf-scaling-device-609', 'netconf-scaling-device-610', 'netconf-scaling-device-611', 'netconf-scaling-device-612', 'netconf-scaling-device-613', 'netconf-scaling-device-614', 'netconf-scaling-device-615', 'netconf-scaling-device-616', 'netconf-scaling-device-617', 'netconf-scaling-device-618', 'netconf-scaling-device-619', 'netconf-scaling-device-620', 'netconf-scaling-device-621', 'netconf-scaling-device-622', 'netconf-scaling-device-623', 'netconf-scaling-device-624', 'netconf-scaling-device-625', 'netconf-scaling-device-626', 'netconf-scaling-device-627', 'netconf-scaling-device-628', 'netconf-scaling-device-629', 'netconf-scaling-device-630', 'netconf-scaling-device-631', 'netconf-scaling-device-632', 'netconf-scaling-device-633', 'netconf-scaling-device-634', 'netconf-scaling-device-635', 'netconf-scaling-device-636', 'netconf-scaling-device-637', 'netconf-scaling-device-638', 'netconf-scaling-device-639', 'netconf-scaling-device-640', 'netconf-scaling-device-641', 'netconf-scaling-device-642', 'netconf-scaling-device-643', 'netconf-scaling-device-644', 'netconf-scaling-device-645', 'netconf-scaling-device-646', 'netconf-scaling-device-647', 'netconf-scaling-device-648', 'netconf-scaling-device-649', 'netconf-scaling-device-650', 'netconf-scaling-device-651', 'netconf-scaling-device-652', 'netconf-scaling-device-653', 'netconf-scaling-device-654', 'netconf-scaling-device-655', 'netconf-scaling-device-656', 'netconf-scaling-device-657', 'netconf-scaling-device-658', 'netconf-scaling-device-659', 'netconf-scaling-device-660', 'netconf-scaling-device-661', 'netconf-scaling-device-662', 'netconf-scaling-device-663', 'netconf-scaling-device-664', 'netconf-scaling-device-665', 'netconf-scaling-device-666', 'netconf-scaling-device-667', 'netconf-scaling-device-668', 'netconf-scaling-device-669', 'netconf-scaling-device-670', 'netconf-scaling-device-671', 'netconf-scaling-device-672', 'netconf-scaling-device-673', 'netconf-scaling-device-674', 'netconf-scaling-device-675', 'netconf-scaling-device-676', 'netconf-scaling-device-677', 'netconf-scaling-device-678', 'netconf-scaling-device-679', 'netconf-scaling-device-680', 'netconf-scaling-device-681', 'netconf-scaling-device-682', 'netconf-scaling-device-683', 'netconf-scaling-device-684', 'netconf-scaling-device-685', 'netconf-scaling-device-686', 'netconf-scaling-device-687', 'netconf-scaling-device-688', 'netconf-scaling-device-689', 'netconf-scaling-device-690', 'netconf-scaling-device-691', 'netconf-scaling-device-692', 'netconf-scaling-device-693', 'netconf-scaling-device-694', 'netconf-scaling-device-695', 'netconf-scaling-device-696', 'netconf-scaling-device-697', 'netconf-scaling-device-698', 'netconf-scaling-device-699', 'netconf-scaling-device-700', 'netconf-scaling-device-701', 'netconf-scaling-device-702', 'netconf-scaling-device-703', 'netconf-scaling-device-704', 'netconf-scaling-device-705', 'netconf-scaling-device-706', 'netconf-scaling-device-707', 'netconf-scaling-device-708', 'netconf-scaling-device-709', 'netconf-scaling-device-710', 'netconf-scaling-device-711', 'netconf-scaling-device-712', 'netconf-scaling-device-713', 'netconf-scaling-device-714', 'netconf-scaling-device-715', 'netconf-scaling-device-716', 'netconf-scaling-device-717', 'netconf-scaling-device-718', 'netconf-scaling-device-719', 'netconf-scaling-device-720', 'netconf-scaling-device-721', 'netconf-scaling-device-722', 'netconf-scaling-device-723', 'netconf-scaling-device-724', 'netconf-scaling-device-725', 'netconf-scaling-device-726', 'netconf-scaling-device-727', 'netconf-scaling-device-728', 'netconf-scaling-device-729', 'netconf-scaling-device-730', 'netconf-scaling-device-731', 'netconf-scaling-device-732', 'netconf-scaling-device-733', 'netconf-scaling-device-734', 'netconf-scaling-device-735', 'netconf-scaling-device-736', 'netconf-scaling-device-737', 'netconf-scaling-device-738', 'netconf-scaling-device-739', 'netconf-scaling-device-740', 'netconf-scaling-device-741', 'netconf-scaling-device-742', 'netconf-scaling-device-743', 'netconf-scaling-device-744', 'netconf-scaling-device-745', 'netconf-scaling-device-746', 'netconf-scaling-device-747', 'netconf-scaling-device-748', 'netconf-scaling-device-749', 'netconf-scaling-device-750', 'netconf-scaling-device-751', 'netconf-scaling-device-752', 'netconf-scaling-device-753', 'netconf-scaling-device-754', 'netconf-scaling-device-755', 'netconf-scaling-device-756', 'netconf-scaling-device-757', 'netconf-scaling-device-758', 'netconf-scaling-device-759', 'netconf-scaling-device-760', 'netconf-scaling-device-761', 'netconf-scaling-device-762', 'netconf-scaling-device-763', 'netconf-scaling-device-764', 'netconf-scaling-device-765', 'netconf-scaling-device-766', 'netconf-scaling-device-767', 'netconf-scaling-device-768', 'netconf-scaling-device-769', 'netconf-scaling-device-770', 'netconf-scaling-device-771', 'netconf-scaling-device-772', 'netconf-scaling-device-773', 'netconf-scaling-device-774', 'netconf-scaling-device-775', 'netconf-scaling-device-776', 'netconf-scaling-device-777', 'netconf-scaling-device-778', 'netconf-scaling-device-779', 'netconf-scaling-device-780', 'netconf-scaling-device-781', 'netconf-scaling-device-782', 'netconf-scaling-device-783', 'netconf-scaling-device-784', 'netconf-scaling-device-785', 'netconf-scaling-device-786', 'netconf-scaling-device-787', 'netconf-scaling-device-788', 'netconf-scaling-device-789', 'netconf-scaling-device-790', 'netconf-scaling-device-791', 'netconf-scaling-device-792', 'netconf-scaling-device-793', 'netconf-scaling-device-794', 'netconf-scaling-device-795', 'netconf-scaling-device-796', 'netconf-scaling-device-797', 'netconf-scaling-device-798', 'netconf-scaling-device-799', 'netconf-scaling-device-800', 'netconf-scaling-device-801', 'netconf-scaling-device-802', 'netconf-scaling-device-803', 'netconf-scaling-device-804', 'netconf-scaling-device-805', 'netconf-scaling-device-806', 'netconf-scaling-device-807', 'netconf-scaling-device-808', 'netconf-scaling-device-809', 'netconf-scaling-device-810', 'netconf-scaling-device-811', 'netconf-scaling-device-812', 'netconf-scaling-device-813', 'netconf-scaling-device-814', 'netconf-scaling-device-815', 'netconf-scaling-device-816', 'netconf-scaling-device-817', 'netconf-scaling-device-818', 'netconf-scaling-device-819', 'netconf-scaling-device-820', 'netconf-scaling-device-821', 'netconf-scaling-device-822', 'netconf-scaling-device-823', 'netconf-scaling-device-824', 'netconf-scaling-device-825', 'netconf-scaling-device-826', 'netconf-scaling-device-827', 'netconf-scaling-device-828', 'netconf-scaling-device-829', 'netconf-scaling-device-830', 'netconf-scaling-device-831', 'netconf-scaling-device-832', 'netconf-scaling-device-833', 'netconf-scaling-device-834', 'netconf-scaling-device-835', 'netconf-scaling-device-836', 'netconf-scaling-device-837', 'netconf-scaling-device-838', 'netconf-scaling-device-839', 'netconf-scaling-device-840', 'netconf-scaling-device-841', 'netconf-scaling-device-842', 'netconf-scaling-device-843', 'netconf-scaling-device-844', 'netconf-scaling-device-845', 'netconf-scaling-device-846', 'netconf-scaling-device-847', 'netconf-scaling-device-848', 'netconf-scaling-device-849', 'netconf-scaling-device-850', 'netconf-scaling-device-851', 'netconf-scaling-device-852', 'netconf-scaling-device-853', 'netconf-scaling-device-854', 'netconf-scaling-device-855', 'netconf-scaling-device-856', 'netconf-scaling-device-857', 'netconf-scaling-device-858', 'netconf-scaling-device-859', 'netconf-scaling-device-860', 'netconf-scaling-device-861', 'netconf-scaling-device-862', 'netconf-scaling-device-863', 'netconf-scaling-device-864', 'netconf-scaling-device-865', 'netconf-scaling-device-866', 'netconf-scaling-device-867', 'netconf-scaling-device-868', 'netconf-scaling-device-869', 'netconf-scaling-device-870', 'netconf-scaling-device-871', 'netconf-scaling-device-872', 'netconf-scaling-device-873', 'netconf-scaling-device-874', 'netconf-scaling-device-875', 'netconf-scaling-device-876', 'netconf-scaling-device-877', 'netconf-scaling-device-878', 'netconf-scaling-device-879', 'netconf-scaling-device-880', 'netconf-scaling-device-881', 'netconf-scaling-device-882', 'netconf-scaling-device-883', 'netconf-scaling-device-884', 'netconf-scaling-device-885', 'netconf-scaling-device-886', 'netconf-scaling-device-887', 'netconf-scaling-device-888', 'netconf-scaling-device-889', 'netconf-scaling-device-890', 'netconf-scaling-device-891', 'netconf-scaling-device-892', 'netconf-scaling-device-893', 'netconf-scaling-device-894', 'netconf-scaling-device-895', 'netconf-scaling-device-896', 'netconf-scaling-device-897', 'netconf-scaling-device-898', 'netconf-scaling-device-899', 'netconf-scaling-device-900', 'netconf-scaling-device-901', 'netconf-scaling-device-902', 'netconf-scaling-device-903', 'netconf-scaling-device-904', 'netconf-scaling-device-905', 'netconf-scaling-device-906', 'netconf-scaling-device-907', 'netconf-scaling-device-908', 'netconf-scaling-device-909', 'netconf-scaling-device-910', 'netconf-scaling-device-911', 'netconf-scaling-device-912', 'netconf-scaling-device-913', 'netconf-scaling-device-914', 'netconf-scaling-device-915', 'netconf-scaling-device-916', 'netconf-scaling-device-917', 'netconf-scaling-device-918', 'netconf-scaling-device-919', 'netconf-scaling-device-920', 'netconf-scaling-device-921', 'netconf-scaling-device-922', 'netconf-scaling-device-923', 'netconf-scaling-device-924', 'netconf-scaling-device-925', 'netconf-scaling-device-926', 'netconf-scaling-device-927', 'netconf-scaling-device-928', 'netconf-scaling-device-929', 'netconf-scaling-device-930', 'netconf-scaling-device-931', 'netconf-scaling-device-932', 'netconf-scaling-device-933', 'netconf-scaling-device-934', 'netconf-scaling-device-935', 'netconf-scaling-device-936', 'netconf-scaling-device-937', 'netconf-scaling-device-938', 'netconf-scaling-device-939', 'netconf-scaling-device-940', 'netconf-scaling-device-941', 'netconf-scaling-device-942', 'netconf-scaling-device-943', 'netconf-scaling-device-944', 'netconf-scaling-device-945', 'netconf-scaling-device-946', 'netconf-scaling-device-947', 'netconf-scaling-device-948', 'netconf-scaling-device-949', 'netconf-scaling-device-950', 'netconf-scaling-device-951', 'netconf-scaling-device-952', 'netconf-scaling-device-953', 'netconf-scaling-device-954', 'netconf-scaling-device-955', 'netconf-scaling-device-956', 'netconf-scaling-device-957', 'netconf-scaling-device-958', 'netconf-scaling-device-959', 'netconf-scaling-device-960', 'netconf-scaling-device-961', 'netconf-scaling-device-962', 'netconf-scaling-device-963', 'netconf-scaling-device-964', 'netconf-scaling-device-965', 'netconf-scaling-device-966', 'netconf-scaling-device-967', 'netconf-scaling-device-968', 'netconf-scaling-device-969', 'netconf-scaling-device-970', 'netconf-scaling-device-971', 'netconf-scaling-device-972', 'netconf-scaling-device-973', 'netconf-scaling-device-974', 'netconf-scaling-device-975', 'netconf-scaling-device-976', 'netconf-scaling-device-977', 'netconf-scaling-device-978', 'netconf-scaling-device-979', 'netconf-scaling-device-980', 'netconf-scaling-device-981', 'netconf-scaling-device-982', 'netconf-scaling-device-983', 'netconf-scaling-device-984', 'netconf-scaling-device-985', 'netconf-scaling-device-986', 'netconf-scaling-device-987', 'netconf-scaling-device-988', 'netconf-scaling-device-989', 'netconf-scaling-device-990', 'netconf-scaling-device-991', 'netconf-scaling-device-992', 'netconf-scaling-device-993', 'netconf-scaling-device-994', 'netconf-scaling-device-995', 'netconf-scaling-device-996', 'netconf-scaling-device-997', 'netconf-scaling-device-998', 'netconf-scaling-device-999', 'netconf-scaling-device-1000']</msg>
<msg time="2026-08-16T00:47:15.860272" level="FAIL">Timed out waiting for {'netconf-scaling-device-471', 'netconf-scaling-device-129', 'netconf-scaling-device-166', 'netconf-scaling-device-560', 'netconf-scaling-device-936', 'netconf-scaling-device-335', 'netconf-scaling-device-17', 'netconf-scaling-device-462', 'netconf-scaling-device-908', 'netconf-scaling-device-14', 'netconf-scaling-device-513', 'netconf-scaling-device-93', 'netconf-scaling-device-360', 'netconf-scaling-device-838', 'netconf-scaling-device-535', 'netconf-scaling-device-439', 'netconf-scaling-device-183', 'netconf-scaling-device-208', 'netconf-scaling-device-977', 'netconf-scaling-device-390', 'netconf-scaling-device-563', 'netconf-scaling-device-231', 'netconf-scaling-device-32', 'netconf-scaling-device-352', 'netconf-scaling-device-750', 'netconf-scaling-device-808', 'netconf-scaling-device-820', 'netconf-scaling-device-19', 'netconf-scaling-device-342', 'netconf-scaling-device-720', 'netconf-scaling-device-913', 'netconf-scaling-device-272', 'netconf-scaling-device-39', 'netconf-scaling-device-595', 'netconf-scaling-device-185', 'netconf-scaling-device-502', 'netconf-scaling-device-520', 'netconf-scaling-device-71', 'netconf-scaling-device-375', 'netconf-scaling-device-399', 'netconf-scaling-device-207', 'netconf-scaling-device-721', 'netconf-scaling-device-821', 'netconf-scaling-device-899', 'netconf-scaling-device-460', 'netconf-scaling-device-419', 'netconf-scaling-device-43', 'netconf-scaling-device-106', 'netconf-scaling-device-192', 'netconf-scaling-device-401', 'netconf-scaling-device-904', 'netconf-scaling-device-431', 'netconf-scaling-device-151', 'netconf-scaling-device-769', 'netconf-scaling-device-656', 'netconf-scaling-device-328', 'netconf-scaling-device-559', 'netconf-scaling-device-594', 'netconf-scaling-device-918', 'netconf-scaling-device-942', 'netconf-scaling-device-555', 'netconf-scaling-device-742', 'netconf-scaling-device-73', 'netconf-scaling-device-113', 'netconf-scaling-device-159', 'netconf-scaling-device-958', 'netconf-scaling-device-234', 'netconf-scaling-device-505', 'netconf-scaling-device-47', 'netconf-scaling-device-29', 'netconf-scaling-device-351', 'netconf-scaling-device-493', 'netconf-scaling-device-604', 'netconf-scaling-device-735', 'netconf-scaling-device-379', 'netconf-scaling-device-876', 'netconf-scaling-device-153', 'netconf-scaling-device-407', 'netconf-scaling-device-896', 'netconf-scaling-device-894', 'netconf-scaling-device-7', 'netconf-scaling-device-317', 'netconf-scaling-device-417', 'netconf-scaling-device-693', 'netconf-scaling-device-732', 'netconf-scaling-device-935', 'netconf-scaling-device-481', 'netconf-scaling-device-347', 'netconf-scaling-device-907', 'netconf-scaling-device-490', 'netconf-scaling-device-969', 'netconf-scaling-device-118', 'netconf-scaling-device-254', 'netconf-scaling-device-437', 'netconf-scaling-device-198', 'netconf-scaling-device-981', 'netconf-scaling-device-606', 'netconf-scaling-device-617', 'netconf-scaling-device-676', 'netconf-scaling-device-997', 'netconf-scaling-device-801', 'netconf-scaling-device-531', 'netconf-scaling-device-224', 'netconf-scaling-device-34', 'netconf-scaling-device-105', 'netconf-scaling-device-74', 'netconf-scaling-device-184', 'netconf-scaling-device-888', 'netconf-scaling-device-144', 'netconf-scaling-device-316', 'netconf-scaling-device-289', 'netconf-scaling-device-905', 'netconf-scaling-device-989', 'netconf-scaling-device-142', 'netconf-scaling-device-670', 'netconf-scaling-device-729', 'netconf-scaling-device-587', 'netconf-scaling-device-891', 'netconf-scaling-device-469', 'netconf-scaling-device-552', 'netconf-scaling-device-178', 'netconf-scaling-device-346', 'netconf-scaling-device-484', 'netconf-scaling-device-906', 'netconf-scaling-device-235', 'netconf-scaling-device-304', 'netconf-scaling-device-262', 'netconf-scaling-device-115', 'netconf-scaling-device-395', 'netconf-scaling-device-436', 'netconf-scaling-device-697', 'netconf-scaling-device-75', 'netconf-scaling-device-583', 'netconf-scaling-device-405', 'netconf-scaling-device-345', 'netconf-scaling-device-88', 'netconf-scaling-device-400', 'netconf-scaling-device-999', 'netconf-scaling-device-337', 'netconf-scaling-device-233', 'netconf-scaling-device-645', 'netconf-scaling-device-843', 'netconf-scaling-device-16', 'netconf-scaling-device-389', 'netconf-scaling-device-126', 'netconf-scaling-device-218', 'netconf-scaling-device-633', 'netconf-scaling-device-773', 'netconf-scaling-device-96', 'netconf-scaling-device-180', 'netconf-scaling-device-383', 'netconf-scaling-device-995', 'netconf-scaling-device-707', 'netconf-scaling-device-25', 'netconf-scaling-device-364', 'netconf-scaling-device-492', 'netconf-scaling-device-311', 'netconf-scaling-device-72', 'netconf-scaling-device-571', 'netconf-scaling-device-825', 'netconf-scaling-device-413', 'netconf-scaling-device-572', 'netconf-scaling-device-582', 'netconf-scaling-device-274', 'netconf-scaling-device-238', 'netconf-scaling-device-202', 'netconf-scaling-device-755', 'netconf-scaling-device-990', 'netconf-scaling-device-518', 'netconf-scaling-device-954', 'netconf-scaling-device-522', 'netconf-scaling-device-8', 'netconf-scaling-device-712', 'netconf-scaling-device-187', 'netconf-scaling-device-453', 'netconf-scaling-device-795', 'netconf-scaling-device-168', 'netconf-scaling-device-313', 'netconf-scaling-device-744', 'netconf-scaling-device-631', 'netconf-scaling-device-862', 'netconf-scaling-device-509', 'netconf-scaling-device-749', 'netconf-scaling-device-576', 'netconf-scaling-device-730', 'netconf-scaling-device-539', 'netconf-scaling-device-30', 'netconf-scaling-device-902', 'netconf-scaling-device-662', 'netconf-scaling-device-483', 'netconf-scaling-device-661', 'netconf-scaling-device-528', 'netconf-scaling-device-61', 'netconf-scaling-device-944', 'netconf-scaling-device-680', 'netconf-scaling-device-62', 'netconf-scaling-device-557', 'netconf-scaling-device-879', 'netconf-scaling-device-281', 'netconf-scaling-device-66', 'netconf-scaling-device-384', 'netconf-scaling-device-169', 'netconf-scaling-device-414', 'netconf-scaling-device-60', 'netconf-scaling-device-410', 'netconf-scaling-device-659', 'netconf-scaling-device-326', 'netconf-scaling-device-415', 'netconf-scaling-device-449', 'netconf-scaling-device-809', 'netconf-scaling-device-937', 'netconf-scaling-device-777', 'netconf-scaling-device-392', 'netconf-scaling-device-824', 'netconf-scaling-device-549', 'netconf-scaling-device-960', 'netconf-scaling-device-82', 'netconf-scaling-device-763', 'netconf-scaling-device-271', 'netconf-scaling-device-841', 'netconf-scaling-device-629', 'netconf-scaling-device-44', 'netconf-scaling-device-632', 'netconf-scaling-device-861', 'netconf-scaling-device-925', 'netconf-scaling-device-955', 'netconf-scaling-device-517', 'netconf-scaling-device-78', 'netconf-scaling-device-333', 'netconf-scaling-device-367', 'netconf-scaling-device-884', 'netconf-scaling-device-938', 'netconf-scaling-device-92', 'netconf-scaling-device-213', 'netconf-scaling-device-214', 'netconf-scaling-device-524', 'netconf-scaling-device-193', 'netconf-scaling-device-359', 'netconf-scaling-device-285', 'netconf-scaling-device-564', 'netconf-scaling-device-793', 'netconf-scaling-device-802', 'netconf-scaling-device-423', 'netconf-scaling-device-882', 'netconf-scaling-device-468', 'netconf-scaling-device-507', 'netconf-scaling-device-536', 'netconf-scaling-device-293', 'netconf-scaling-device-806', 'netconf-scaling-device-871', 'netconf-scaling-device-173', 'netconf-scaling-device-2', 'netconf-scaling-device-533', 'netconf-scaling-device-411', 'netconf-scaling-device-869', 'netconf-scaling-device-154', 'netconf-scaling-device-889', 'netconf-scaling-device-332', 'netconf-scaling-device-164', 'netconf-scaling-device-779', 'netconf-scaling-device-900', 'netconf-scaling-device-945', 'netconf-scaling-device-487', 'netconf-scaling-device-286', 'netconf-scaling-device-237', 'netconf-scaling-device-691', 'netconf-scaling-device-349', 'netconf-scaling-device-812', 'netconf-scaling-device-179', 'netconf-scaling-device-391', 'netconf-scaling-device-67', 'netconf-scaling-device-971', 'netconf-scaling-device-50', 'netconf-scaling-device-135', 'netconf-scaling-device-91', 'netconf-scaling-device-949', 'netconf-scaling-device-300', 'netconf-scaling-device-450', 'netconf-scaling-device-120', 'netconf-scaling-device-568', 'netconf-scaling-device-627', 'netconf-scaling-device-498', 'netconf-scaling-device-24', 'netconf-scaling-device-322', 'netconf-scaling-device-648', 'netconf-scaling-device-664', 'netconf-scaling-device-472', 'netconf-scaling-device-624', 'netconf-scaling-device-984', 'netconf-scaling-device-470', 'netconf-scaling-device-781', 'netconf-scaling-device-543', 'netconf-scaling-device-454', 'netconf-scaling-device-887', 'netconf-scaling-device-425', 'netconf-scaling-device-575', 'netconf-scaling-device-355', 'netconf-scaling-device-972', 'netconf-scaling-device-155', 'netconf-scaling-device-815', 'netconf-scaling-device-86', 'netconf-scaling-device-167', 'netconf-scaling-device-845', 'netconf-scaling-device-630', 'netconf-scaling-device-409', 'netconf-scaling-device-165', 'netconf-scaling-device-807', 'netconf-scaling-device-538', 'netconf-scaling-device-767', 'netconf-scaling-device-877', 'netconf-scaling-device-688', 'netconf-scaling-device-678', 'netconf-scaling-device-334', 'netconf-scaling-device-134', 'netconf-scaling-device-581', 'netconf-scaling-device-687', 'netconf-scaling-device-695', 'netconf-scaling-device-500', 'netconf-scaling-device-205', 'netconf-scaling-device-796', 'netconf-scaling-device-672', 'netconf-scaling-device-130', 'netconf-scaling-device-911', 'netconf-scaling-device-848', 'netconf-scaling-device-690', 'netconf-scaling-device-988', 'netconf-scaling-device-556', 'netconf-scaling-device-76', 'netconf-scaling-device-381', 'netconf-scaling-device-64', 'netconf-scaling-device-553', 'netconf-scaling-device-426', 'netconf-scaling-device-667', 'netconf-scaling-device-847', 'netconf-scaling-device-921', 'netconf-scaling-device-111', 'netconf-scaling-device-35', 'netconf-scaling-device-433', 'netconf-scaling-device-376', 'netconf-scaling-device-475', 'netconf-scaling-device-515', 'netconf-scaling-device-754', 'netconf-scaling-device-196', 'netconf-scaling-device-599', 'netconf-scaling-device-934', 'netconf-scaling-device-148', 'netconf-scaling-device-551', 'netconf-scaling-device-189', 'netconf-scaling-device-283', 'netconf-scaling-device-177', 'netconf-scaling-device-408', 'netconf-scaling-device-991', 'netconf-scaling-device-353', 'netconf-scaling-device-950', 'netconf-scaling-device-152', 'netconf-scaling-device-10', 'netconf-scaling-device-97', 'netconf-scaling-device-919', 'netconf-scaling-device-467', 'netconf-scaling-device-856', 'netconf-scaling-device-295', 'netconf-scaling-device-514', 'netconf-scaling-device-217', 'netconf-scaling-device-145', 'netconf-scaling-device-230', 'netconf-scaling-device-835', 'netconf-scaling-device-13', 'netconf-scaling-device-33', 'netconf-scaling-device-229', 'netconf-scaling-device-603', 'netconf-scaling-device-297', 'netconf-scaling-device-358', 'netconf-scaling-device-157', 'netconf-scaling-device-496', 'netconf-scaling-device-758', 'netconf-scaling-device-782', 'netconf-scaling-device-63', 'netconf-scaling-device-542', 'netconf-scaling-device-132', 'netconf-scaling-device-59', 'netconf-scaling-device-28', 'netconf-scaling-device-886', 'netconf-scaling-device-324', 'netconf-scaling-device-46', 'netconf-scaling-device-171', 'netconf-scaling-device-608', 'netconf-scaling-device-924', 'netconf-scaling-device-350', 'netconf-scaling-device-798', 'netconf-scaling-device-296', 'netconf-scaling-device-702', 'netconf-scaling-device-495', 'netconf-scaling-device-108', 'netconf-scaling-device-307', 'netconf-scaling-device-497', 'netconf-scaling-device-482', 'netconf-scaling-device-657', 'netconf-scaling-device-15', 'netconf-scaling-device-797', 'netconf-scaling-device-917', 'netconf-scaling-device-545', 'netconf-scaling-device-932', 'netconf-scaling-device-724', 'netconf-scaling-device-765', 'netconf-scaling-device-440', 'netconf-scaling-device-780', 'netconf-scaling-device-256', 'netconf-scaling-device-813', 'netconf-scaling-device-827', 'netconf-scaling-device-182', 'netconf-scaling-device-548', 'netconf-scaling-device-146', 'netconf-scaling-device-131', 'netconf-scaling-device-746', 'netconf-scaling-device-776', 'netconf-scaling-device-270', 'netconf-scaling-device-288', 'netconf-scaling-device-588', 'netconf-scaling-device-621', 'netconf-scaling-device-269', 'netconf-scaling-device-805', 'netconf-scaling-device-338', 'netconf-scaling-device-885', 'netconf-scaling-device-537', 'netconf-scaling-device-844', 'netconf-scaling-device-257', 'netconf-scaling-device-45', 'netconf-scaling-device-756', 'netconf-scaling-device-221', 'netconf-scaling-device-759', 'netconf-scaling-device-895', 'netconf-scaling-device-412', 'netconf-scaling-device-302', 'netconf-scaling-device-675', 'netconf-scaling-device-757', 'netconf-scaling-device-162', 'netconf-scaling-device-377', 'netconf-scaling-device-653', 'netconf-scaling-device-123', 'netconf-scaling-device-696', 'netconf-scaling-device-90', 'netconf-scaling-device-319', 'netconf-scaling-device-255', 'netconf-scaling-device-250', 'netconf-scaling-device-501', 'netconf-scaling-device-104', 'netconf-scaling-device-201', 'netconf-scaling-device-303', 'netconf-scaling-device-121', 'netconf-scaling-device-127', 'netconf-scaling-device-446', 'netconf-scaling-device-485', 'netconf-scaling-device-600', 'netconf-scaling-device-292', 'netconf-scaling-device-519', 'netconf-scaling-device-803', 'netconf-scaling-device-451', 'netconf-scaling-device-822', 'netconf-scaling-device-830', 'netconf-scaling-device-946', 'netconf-scaling-device-252', 'netconf-scaling-device-974', 'netconf-scaling-device-770', 'netconf-scaling-device-340', 'netconf-scaling-device-479', 'netconf-scaling-device-55', 'netconf-scaling-device-222', 'netconf-scaling-device-110', 'netconf-scaling-device-516', 'netconf-scaling-device-832', 'netconf-scaling-device-804', 'netconf-scaling-device-430', 'netconf-scaling-device-655', 'netconf-scaling-device-640', 'netconf-scaling-device-209', 'netconf-scaling-device-117', 'netconf-scaling-device-203', 'netconf-scaling-device-225', 'netconf-scaling-device-402', 'netconf-scaling-device-867', 'netconf-scaling-device-973', 'netconf-scaling-device-722', 'netconf-scaling-device-837', 'netconf-scaling-device-396', 'netconf-scaling-device-943', 'netconf-scaling-device-245', 'netconf-scaling-device-970', 'netconf-scaling-device-851', 'netconf-scaling-device-442', 'netconf-scaling-device-597', 'netconf-scaling-device-216', 'netconf-scaling-device-708', 'netconf-scaling-device-874', 'netconf-scaling-device-751', 'netconf-scaling-device-310', 'netconf-scaling-device-584', 'netconf-scaling-device-570', 'netconf-scaling-device-265', 'netconf-scaling-device-98', 'netconf-scaling-device-577', 'netconf-scaling-device-170', 'netconf-scaling-device-240', 'netconf-scaling-device-948', 'netconf-scaling-device-788', 'netconf-scaling-device-799', 'netconf-scaling-device-275', 'netconf-scaling-device-933', 'netconf-scaling-device-242', 'netconf-scaling-device-784', 'netconf-scaling-device-643', 'netconf-scaling-device-652', 'netconf-scaling-device-792', 'netconf-scaling-device-791', 'netconf-scaling-device-638', 'netconf-scaling-device-36', 'netconf-scaling-device-163', 'netconf-scaling-device-457', 'netconf-scaling-device-768', 'netconf-scaling-device-70', 'netconf-scaling-device-647', 'netconf-scaling-device-103', 'netconf-scaling-device-199', 'netconf-scaling-device-370', 'netconf-scaling-device-654', 'netconf-scaling-device-714', 'netconf-scaling-device-737', 'netconf-scaling-device-385', 'netconf-scaling-device-753', 'netconf-scaling-device-967', 'netconf-scaling-device-339', 'netconf-scaling-device-766', 'netconf-scaling-device-77', 'netconf-scaling-device-186', 'netconf-scaling-device-403', 'netconf-scaling-device-605', 'netconf-scaling-device-329', 'netconf-scaling-device-143', 'netconf-scaling-device-85', 'netconf-scaling-device-748', 'netconf-scaling-device-211', 'netconf-scaling-device-762', 'netconf-scaling-device-83', 'netconf-scaling-device-40', 'netconf-scaling-device-156', 'netconf-scaling-device-544', 'netconf-scaling-device-478', 'netconf-scaling-device-673', 'netconf-scaling-device-325', 'netconf-scaling-device-18', 'netconf-scaling-device-530', 'netconf-scaling-device-684', 'netconf-scaling-device-124', 'netconf-scaling-device-789', 'netconf-scaling-device-188', 'netconf-scaling-device-253', 'netconf-scaling-device-726', 'netconf-scaling-device-794', 'netconf-scaling-device-620', 'netconf-scaling-device-147', 'netconf-scaling-device-987', 'netconf-scaling-device-11', 'netconf-scaling-device-114', 'netconf-scaling-device-308', 'netconf-scaling-device-1000', 'netconf-scaling-device-589', 'netconf-scaling-device-287', 'netconf-scaling-device-87', 'netconf-scaling-device-511', 'netconf-scaling-device-160', 'netconf-scaling-device-194', 'netconf-scaling-device-704', 'netconf-scaling-device-49', 'netconf-scaling-device-280', 'netconf-scaling-device-445', 'netconf-scaling-device-772', 'netconf-scaling-device-855', 'netconf-scaling-device-927', 'netconf-scaling-device-321', 'netconf-scaling-device-212', 'netconf-scaling-device-369', 'netconf-scaling-device-388', 'netconf-scaling-device-634', 'netconf-scaling-device-534', 'netconf-scaling-device-443', 'netconf-scaling-device-823', 'netconf-scaling-device-978', 'netconf-scaling-device-985', 'netconf-scaling-device-100', 'netconf-scaling-device-204', 'netconf-scaling-device-244', 'netconf-scaling-device-641', 'netconf-scaling-device-814', 'netconf-scaling-device-452', 'netconf-scaling-device-723', 'netconf-scaling-device-829', 'netconf-scaling-device-9', 'netconf-scaling-device-586', 'netconf-scaling-device-858', 'netconf-scaling-device-740', 'netconf-scaling-device-172', 'netconf-scaling-device-565', 'netconf-scaling-device-223', 'netconf-scaling-device-639', 'netconf-scaling-device-309', 'netconf-scaling-device-503', 'netconf-scaling-device-525', 'netconf-scaling-device-836', 'netconf-scaling-device-21', 'netconf-scaling-device-733', 'netconf-scaling-device-912', 'netconf-scaling-device-424', 'netconf-scaling-device-3', 'netconf-scaling-device-736', 'netconf-scaling-device-842', 'netconf-scaling-device-31', 'netconf-scaling-device-852', 'netconf-scaling-device-489', 'netconf-scaling-device-248', 'netconf-scaling-device-330', 'netconf-scaling-device-596', 'netconf-scaling-device-371', 'netconf-scaling-device-125', 'netconf-scaling-device-361', 'netconf-scaling-device-397', 'netconf-scaling-device-368', 'netconf-scaling-device-715', 'netconf-scaling-device-725', 'netconf-scaling-device-112', 'netconf-scaling-device-863', 'netconf-scaling-device-94', 'netconf-scaling-device-473', 'netconf-scaling-device-947', 'netconf-scaling-device-986', 'netconf-scaling-device-920', 'netconf-scaling-device-299', 'netconf-scaling-device-22', 'netconf-scaling-device-658', 'netconf-scaling-device-965', 'netconf-scaling-device-5', 'netconf-scaling-device-865', 'netconf-scaling-device-718', 'netconf-scaling-device-619', 'netconf-scaling-device-260', 'netconf-scaling-device-206', 'netconf-scaling-device-341', 'netconf-scaling-device-828', 'netconf-scaling-device-785', 'netconf-scaling-device-195', 'netconf-scaling-device-239', 'netconf-scaling-device-996', 'netconf-scaling-device-982', 'netconf-scaling-device-800', 'netconf-scaling-device-133', 'netconf-scaling-device-859', 'netconf-scaling-device-263', 'netconf-scaling-device-929', 'netconf-scaling-device-975', 'netconf-scaling-device-102', 'netconf-scaling-device-939', 'netconf-scaling-device-700', 'netconf-scaling-device-646', 'netconf-scaling-device-510', 'netconf-scaling-device-611', 'netconf-scaling-device-585', 'netconf-scaling-device-609', 'netconf-scaling-device-348', 'netconf-scaling-device-878', 'netconf-scaling-device-356', 'netconf-scaling-device-95', 'netconf-scaling-device-247', 'netconf-scaling-device-394', 'netconf-scaling-device-839', 'netconf-scaling-device-764', 'netconf-scaling-device-883', 'netconf-scaling-device-649', 'netconf-scaling-device-711', 'netconf-scaling-device-226', 'netconf-scaling-device-320', 'netconf-scaling-device-54', 'netconf-scaling-device-540', 'netconf-scaling-device-685', 'netconf-scaling-device-743', 'netconf-scaling-device-592', 'netconf-scaling-device-486', 'netconf-scaling-device-786', 'netconf-scaling-device-191', 'netconf-scaling-device-447', 'netconf-scaling-device-363', 'netconf-scaling-device-477', 'netconf-scaling-device-671', 'netconf-scaling-device-866', 'netconf-scaling-device-141', 'netconf-scaling-device-122', 'netconf-scaling-device-422', 'netconf-scaling-device-48', 'netconf-scaling-device-266', 'netconf-scaling-device-219', 'netconf-scaling-device-232', 'netconf-scaling-device-366', 'netconf-scaling-device-880', 'netconf-scaling-device-438', 'netconf-scaling-device-554', 'netconf-scaling-device-569', 'netconf-scaling-device-618', 'netconf-scaling-device-962', 'netconf-scaling-device-857', 'netconf-scaling-device-610', 'netconf-scaling-device-840', 'netconf-scaling-device-738', 'netconf-scaling-device-628', 'netconf-scaling-device-941', 'netconf-scaling-device-27', 'netconf-scaling-device-504', 'netconf-scaling-device-897', 'netconf-scaling-device-683', 'netconf-scaling-device-864', 'netconf-scaling-device-546', 'netconf-scaling-device-727', 'netconf-scaling-device-249', 'netconf-scaling-device-614', 'netconf-scaling-device-870', 'netconf-scaling-device-138', 'netconf-scaling-device-251', 'netconf-scaling-device-418', 'netconf-scaling-device-593', 'netconf-scaling-device-421', 'netconf-scaling-device-916', 'netconf-scaling-device-860', 'netconf-scaling-device-930', 'netconf-scaling-device-574', 'netconf-scaling-device-474', 'netconf-scaling-device-728', 'netconf-scaling-device-268', 'netconf-scaling-device-365', 'netconf-scaling-device-463', 'netconf-scaling-device-623', 'netconf-scaling-device-529', 'netconf-scaling-device-692', 'netconf-scaling-device-312', 'netconf-scaling-device-787', 'netconf-scaling-device-854', 'netconf-scaling-device-703', 'netconf-scaling-device-416', 'netconf-scaling-device-752', 'netconf-scaling-device-956', 'netconf-scaling-device-976', 'netconf-scaling-device-372', 'netconf-scaling-device-20', 'netconf-scaling-device-448', 'netconf-scaling-device-521', 'netconf-scaling-device-635', 'netconf-scaling-device-663', 'netconf-scaling-device-689', 'netconf-scaling-device-200', 'netconf-scaling-device-393', 'netconf-scaling-device-915', 'netconf-scaling-device-119', 'netconf-scaling-device-983', 'netconf-scaling-device-508', 'netconf-scaling-device-706', 'netconf-scaling-device-523', 'netconf-scaling-device-734', 'netconf-scaling-device-84', 'netconf-scaling-device-831', 'netconf-scaling-device-901', 'netconf-scaling-device-998', 'netconf-scaling-device-261', 'netconf-scaling-device-717', 'netconf-scaling-device-220', 'netconf-scaling-device-963', 'netconf-scaling-device-12', 'netconf-scaling-device-314', 'netconf-scaling-device-819', 'netconf-scaling-device-227', 'netconf-scaling-device-267', 'netconf-scaling-device-68', 'netconf-scaling-device-637', 'netconf-scaling-device-541', 'netconf-scaling-device-428', 'netconf-scaling-device-101', 'netconf-scaling-device-625', 'netconf-scaling-device-961', 'netconf-scaling-device-301', 'netconf-scaling-device-591', 'netconf-scaling-device-923', 'netconf-scaling-device-315', 'netconf-scaling-device-790', 'netconf-scaling-device-616', 'netconf-scaling-device-966', 'netconf-scaling-device-56', 'netconf-scaling-device-980', 'netconf-scaling-device-853', 'netconf-scaling-device-331', 'netconf-scaling-device-953', 'netconf-scaling-device-128', 'netconf-scaling-device-771', 'netconf-scaling-device-810', 'netconf-scaling-device-875', 'netconf-scaling-device-259', 'netconf-scaling-device-669', 'netconf-scaling-device-994', 'netconf-scaling-device-979', 'netconf-scaling-device-327', 'netconf-scaling-device-881', 'netconf-scaling-device-747', 'netconf-scaling-device-241', 'netconf-scaling-device-959', 'netconf-scaling-device-210', 'netconf-scaling-device-774', 'netconf-scaling-device-398', 'netconf-scaling-device-816', 'netconf-scaling-device-914', 'netconf-scaling-device-909', 'netconf-scaling-device-264', 'netconf-scaling-device-336', 'netconf-scaling-device-849', 'netconf-scaling-device-660', 'netconf-scaling-device-940', 'netconf-scaling-device-461', 'netconf-scaling-device-873', 'netconf-scaling-device-578', 'netconf-scaling-device-464', 'netconf-scaling-device-928', 'netconf-scaling-device-305', 'netconf-scaling-device-760', 'netconf-scaling-device-387', 'netconf-scaling-device-380', 'netconf-scaling-device-601', 'netconf-scaling-device-480', 'netconf-scaling-device-277', 'netconf-scaling-device-868', 'netconf-scaling-device-404', 'netconf-scaling-device-420', 'netconf-scaling-device-775', 'netconf-scaling-device-964', 'netconf-scaling-device-26', 'netconf-scaling-device-150', 'netconf-scaling-device-432', 'netconf-scaling-device-562', 'netconf-scaling-device-677', 'netconf-scaling-device-872', 'netconf-scaling-device-910', 'netconf-scaling-device-811', 'netconf-scaling-device-378', 'netconf-scaling-device-344', 'netconf-scaling-device-527', 'netconf-scaling-device-681', 'netconf-scaling-device-456', 'netconf-scaling-device-57', 'netconf-scaling-device-158', 'netconf-scaling-device-650', 'netconf-scaling-device-931', 'netconf-scaling-device-607', 'netconf-scaling-device-429', 'netconf-scaling-device-731', 'netconf-scaling-device-622', 'netconf-scaling-device-694', 'netconf-scaling-device-137', 'netconf-scaling-device-567', 'netconf-scaling-device-922', 'netconf-scaling-device-713', 'netconf-scaling-device-52', 'netconf-scaling-device-547', 'netconf-scaling-device-306', 'netconf-scaling-device-58', 'netconf-scaling-device-23', 'netconf-scaling-device-626', 'netconf-scaling-device-441', 'netconf-scaling-device-709', 'netconf-scaling-device-38', 'netconf-scaling-device-246', 'netconf-scaling-device-290', 'netconf-scaling-device-466', 'netconf-scaling-device-491', 'netconf-scaling-device-386', 'netconf-scaling-device-598', 'netconf-scaling-device-41', 'netconf-scaling-device-506', 'netconf-scaling-device-778', 'netconf-scaling-device-116', 'netconf-scaling-device-745', 'netconf-scaling-device-686', 'netconf-scaling-device-278', 'netconf-scaling-device-4', 'netconf-scaling-device-362', 'netconf-scaling-device-739', 'netconf-scaling-device-357', 'netconf-scaling-device-81', 'netconf-scaling-device-282', 'netconf-scaling-device-69', 'netconf-scaling-device-716', 'netconf-scaling-device-318', 'netconf-scaling-device-783', 'netconf-scaling-device-558', 'netconf-scaling-device-719', 'netconf-scaling-device-488', 'netconf-scaling-device-382', 'netconf-scaling-device-613', 'netconf-scaling-device-323', 'netconf-scaling-device-590', 'netconf-scaling-device-579', 'netconf-scaling-device-701', 'netconf-scaling-device-890', 'netconf-scaling-device-434', 'netconf-scaling-device-139', 'netconf-scaling-device-952', 'netconf-scaling-device-109', 'netconf-scaling-device-89', 'netconf-scaling-device-499', 'netconf-scaling-device-668', 'netconf-scaling-device-175', 'netconf-scaling-device-850', 'netconf-scaling-device-79', 'netconf-scaling-device-903', 'netconf-scaling-device-893', 'netconf-scaling-device-612', 'netconf-scaling-device-644', 'netconf-scaling-device-580', 'netconf-scaling-device-273', 'netconf-scaling-device-354', 'netconf-scaling-device-602', 'netconf-scaling-device-532', 'netconf-scaling-device-243', 'netconf-scaling-device-197', 'netconf-scaling-device-674', 'netconf-scaling-device-710', 'netconf-scaling-device-279', 'netconf-scaling-device-6', 'netconf-scaling-device-427', 'netconf-scaling-device-459', 'netconf-scaling-device-818', 'netconf-scaling-device-343', 'netconf-scaling-device-215', 'netconf-scaling-device-636', 'netconf-scaling-device-698', 'netconf-scaling-device-174', 'netconf-scaling-device-107', 'netconf-scaling-device-817', 'netconf-scaling-device-374', 'netconf-scaling-device-992', 'netconf-scaling-device-834', 'netconf-scaling-device-642', 'netconf-scaling-device-99', 'netconf-scaling-device-573', 'netconf-scaling-device-136', 'netconf-scaling-device-651', 'netconf-scaling-device-406', 'netconf-scaling-device-679', 'netconf-scaling-device-705', 'netconf-scaling-device-892', 'netconf-scaling-device-455', 'netconf-scaling-device-258', 'netconf-scaling-device-699', 'netconf-scaling-device-51', 'netconf-scaling-device-276', 'netconf-scaling-device-512', 'netconf-scaling-device-682', 'netconf-scaling-device-968', 'netconf-scaling-device-550', 'netconf-scaling-device-435', 'netconf-scaling-device-42', 'netconf-scaling-device-458', 'netconf-scaling-device-298', 'netconf-scaling-device-898', 'netconf-scaling-device-926', 'netconf-scaling-device-1', 'netconf-scaling-device-181', 'netconf-scaling-device-161', 'netconf-scaling-device-476', 'netconf-scaling-device-826', 'netconf-scaling-device-741', 'netconf-scaling-device-665', 'netconf-scaling-device-236', 'netconf-scaling-device-666', 'netconf-scaling-device-294', 'netconf-scaling-device-140', 'netconf-scaling-device-561', 'netconf-scaling-device-37', 'netconf-scaling-device-494', 'netconf-scaling-device-833', 'netconf-scaling-device-951', 'netconf-scaling-device-465', 'netconf-scaling-device-373', 'netconf-scaling-device-993', 'netconf-scaling-device-80', 'netconf-scaling-device-761', 'netconf-scaling-device-957', 'netconf-scaling-device-53', 'netconf-scaling-device-65', 'netconf-scaling-device-291', 'netconf-scaling-device-526', 'netconf-scaling-device-284', 'netconf-scaling-device-190', 'netconf-scaling-device-566', 'netconf-scaling-device-228', 'netconf-scaling-device-149', 'netconf-scaling-device-176', 'netconf-scaling-device-615', 'netconf-scaling-device-846'} to connect</msg>
<arg>restconf_url=${restconf_url}</arg>
<arg>device_names=${device_names}</arg>
<arg>deadline_seconds=${timeout}</arg>
<arg>use_node_encapsulation=${use_node_encapsulation}</arg>
<doc>Await all specified devices to become connected in NETCONF topology at specified RESTCONF URL.</doc>
<status status="FAIL" start="2026-08-15T23:57:15.844063" elapsed="3000.018941">Timed out waiting for {'netconf-scaling-device-471', 'netconf-scaling-device-129', 'netconf-scaling-device-166', 'netconf-scaling-device-560', 'netconf-scaling-device-936', 'netconf-scaling-device-335', 'netconf-scaling-device-17', 'netconf-scaling-device-462', 'netconf-scaling-device-908', 'netconf-scaling-device-14', 'netconf-scaling-device-513', 'netconf-scaling-device-93', 'netconf-scaling-device-360', 'netconf-scaling-device-838', 'netconf-scaling-device-535', 'netconf-scaling-device-439', 'netconf-scaling-device-183', 'netconf-scaling-device-208', 'netconf-scaling-device-977', 'netconf-scaling-device-390', 'netconf-scaling-device-563', 'netconf-scaling-device-231', 'netconf-scaling-device-32', 'netconf-scaling-device-352', 'netconf-scaling-device-750', 'netconf-scaling-device-808', 'netconf-scaling-device-820', 'netconf-scaling-device-19', 'netconf-scaling-device-342', 'netconf-scaling-device-720', 'netconf-scaling-device-913', 'netconf-scaling-device-272', 'netconf-scaling-device-39', 'netconf-scaling-device-595', 'netconf-scaling-device-185', 'netconf-scaling-device-502', 'netconf-scaling-device-520', 'netconf-scaling-device-71', 'netconf-scaling-device-375', 'netconf-scaling-device-399', 'netconf-scaling-device-207', 'netconf-scaling-device-721', 'netconf-scaling-device-821', 'netconf-scaling-device-899', 'netconf-scaling-device-460', 'netconf-scaling-device-419', 'netconf-scaling-device-43', 'netconf-scaling-device-106', 'netconf-scaling-device-192', 'netconf-scaling-device-401', 'netconf-scaling-device-904', 'netconf-sca...
    [ Message content over the limit has been removed. ]
...onf-scaling-device-679', 'netconf-scaling-device-705', 'netconf-scaling-device-892', 'netconf-scaling-device-455', 'netconf-scaling-device-258', 'netconf-scaling-device-699', 'netconf-scaling-device-51', 'netconf-scaling-device-276', 'netconf-scaling-device-512', 'netconf-scaling-device-682', 'netconf-scaling-device-968', 'netconf-scaling-device-550', 'netconf-scaling-device-435', 'netconf-scaling-device-42', 'netconf-scaling-device-458', 'netconf-scaling-device-298', 'netconf-scaling-device-898', 'netconf-scaling-device-926', 'netconf-scaling-device-1', 'netconf-scaling-device-181', 'netconf-scaling-device-161', 'netconf-scaling-device-476', 'netconf-scaling-device-826', 'netconf-scaling-device-741', 'netconf-scaling-device-665', 'netconf-scaling-device-236', 'netconf-scaling-device-666', 'netconf-scaling-device-294', 'netconf-scaling-device-140', 'netconf-scaling-device-561', 'netconf-scaling-device-37', 'netconf-scaling-device-494', 'netconf-scaling-device-833', 'netconf-scaling-device-951', 'netconf-scaling-device-465', 'netconf-scaling-device-373', 'netconf-scaling-device-993', 'netconf-scaling-device-80', 'netconf-scaling-device-761', 'netconf-scaling-device-957', 'netconf-scaling-device-53', 'netconf-scaling-device-65', 'netconf-scaling-device-291', 'netconf-scaling-device-526', 'netconf-scaling-device-284', 'netconf-scaling-device-190', 'netconf-scaling-device-566', 'netconf-scaling-device-228', 'netconf-scaling-device-149', 'netconf-scaling-device-176', 'netconf-scaling-device-615', 'netconf-scaling-device-846'} to connect</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Issue_Requests_On_Devices</arg>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${devices}</arg>
<arg>${NUM_WORKERS}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-08-16T00:47:15.863723" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<break>
<status status="NOT RUN" start="2026-08-16T00:47:15.864162" elapsed="0.000042"/>
</break>
<status status="NOT RUN" start="2026-08-16T00:47:15.864044" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-08-16T00:47:15.863987" elapsed="0.000335"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<var>${maximum_devices}</var>
<arg>${devices}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-16T00:47:15.864697" elapsed="0.000049"/>
</kw>
<kw name="Stop_Testtool" owner="NetconfKeywords">
<doc>Stop testtool and download its log.</doc>
<status status="NOT RUN" start="2026-08-16T00:47:15.865334" elapsed="0.000062"/>
</kw>
<var name="${devices}">1000</var>
<status status="FAIL" start="2026-08-15T23:54:46.287172" elapsed="3149.578385">Timed out waiting for {'netconf-scaling-device-471', 'netconf-scaling-device-129', 'netconf-scaling-device-166', 'netconf-scaling-device-560', 'netconf-scaling-device-936', 'netconf-scaling-device-335', 'netconf-scaling-device-17', 'netconf-scaling-device-462', 'netconf-scaling-device-908', 'netconf-scaling-device-14', 'netconf-scaling-device-513', 'netconf-scaling-device-93', 'netconf-scaling-device-360', 'netconf-scaling-device-838', 'netconf-scaling-device-535', 'netconf-scaling-device-439', 'netconf-scaling-device-183', 'netconf-scaling-device-208', 'netconf-scaling-device-977', 'netconf-scaling-device-390', 'netconf-scaling-device-563', 'netconf-scaling-device-231', 'netconf-scaling-device-32', 'netconf-scaling-device-352', 'netconf-scaling-device-750', 'netconf-scaling-device-808', 'netconf-scaling-device-820', 'netconf-scaling-device-19', 'netconf-scaling-device-342', 'netconf-scaling-device-720', 'netconf-scaling-device-913', 'netconf-scaling-device-272', 'netconf-scaling-device-39', 'netconf-scaling-device-595', 'netconf-scaling-device-185', 'netconf-scaling-device-502', 'netconf-scaling-device-520', 'netconf-scaling-device-71', 'netconf-scaling-device-375', 'netconf-scaling-device-399', 'netconf-scaling-device-207', 'netconf-scaling-device-721', 'netconf-scaling-device-821', 'netconf-scaling-device-899', 'netconf-scaling-device-460', 'netconf-scaling-device-419', 'netconf-scaling-device-43', 'netconf-scaling-device-106', 'netconf-scaling-device-192', 'netconf-scaling-device-401', 'netconf-scaling-device-904', 'netconf-sca...
    [ Message content over the limit has been removed. ]
...onf-scaling-device-679', 'netconf-scaling-device-705', 'netconf-scaling-device-892', 'netconf-scaling-device-455', 'netconf-scaling-device-258', 'netconf-scaling-device-699', 'netconf-scaling-device-51', 'netconf-scaling-device-276', 'netconf-scaling-device-512', 'netconf-scaling-device-682', 'netconf-scaling-device-968', 'netconf-scaling-device-550', 'netconf-scaling-device-435', 'netconf-scaling-device-42', 'netconf-scaling-device-458', 'netconf-scaling-device-298', 'netconf-scaling-device-898', 'netconf-scaling-device-926', 'netconf-scaling-device-1', 'netconf-scaling-device-181', 'netconf-scaling-device-161', 'netconf-scaling-device-476', 'netconf-scaling-device-826', 'netconf-scaling-device-741', 'netconf-scaling-device-665', 'netconf-scaling-device-236', 'netconf-scaling-device-666', 'netconf-scaling-device-294', 'netconf-scaling-device-140', 'netconf-scaling-device-561', 'netconf-scaling-device-37', 'netconf-scaling-device-494', 'netconf-scaling-device-833', 'netconf-scaling-device-951', 'netconf-scaling-device-465', 'netconf-scaling-device-373', 'netconf-scaling-device-993', 'netconf-scaling-device-80', 'netconf-scaling-device-761', 'netconf-scaling-device-957', 'netconf-scaling-device-53', 'netconf-scaling-device-65', 'netconf-scaling-device-291', 'netconf-scaling-device-526', 'netconf-scaling-device-284', 'netconf-scaling-device-190', 'netconf-scaling-device-566', 'netconf-scaling-device-228', 'netconf-scaling-device-149', 'netconf-scaling-device-176', 'netconf-scaling-device-615', 'netconf-scaling-device-846'} to connect</status>
</iter>
<var>${devices}</var>
<value>${start}</value>
<value>${stop+1}</value>
<value>${increment}</value>
<status status="FAIL" start="2026-08-15T23:54:46.284650" elapsed="3149.581123">Timed out waiting for {'netconf-scaling-device-471', 'netconf-scaling-device-129', 'netconf-scaling-device-166', 'netconf-scaling-device-560', 'netconf-scaling-device-936', 'netconf-scaling-device-335', 'netconf-scaling-device-17', 'netconf-scaling-device-462', 'netconf-scaling-device-908', 'netconf-scaling-device-14', 'netconf-scaling-device-513', 'netconf-scaling-device-93', 'netconf-scaling-device-360', 'netconf-scaling-device-838', 'netconf-scaling-device-535', 'netconf-scaling-device-439', 'netconf-scaling-device-183', 'netconf-scaling-device-208', 'netconf-scaling-device-977', 'netconf-scaling-device-390', 'netconf-scaling-device-563', 'netconf-scaling-device-231', 'netconf-scaling-device-32', 'netconf-scaling-device-352', 'netconf-scaling-device-750', 'netconf-scaling-device-808', 'netconf-scaling-device-820', 'netconf-scaling-device-19', 'netconf-scaling-device-342', 'netconf-scaling-device-720', 'netconf-scaling-device-913', 'netconf-scaling-device-272', 'netconf-scaling-device-39', 'netconf-scaling-device-595', 'netconf-scaling-device-185', 'netconf-scaling-device-502', 'netconf-scaling-device-520', 'netconf-scaling-device-71', 'netconf-scaling-device-375', 'netconf-scaling-device-399', 'netconf-scaling-device-207', 'netconf-scaling-device-721', 'netconf-scaling-device-821', 'netconf-scaling-device-899', 'netconf-scaling-device-460', 'netconf-scaling-device-419', 'netconf-scaling-device-43', 'netconf-scaling-device-106', 'netconf-scaling-device-192', 'netconf-scaling-device-401', 'netconf-scaling-device-904', 'netconf-sca...
    [ Message content over the limit has been removed. ]
...onf-scaling-device-679', 'netconf-scaling-device-705', 'netconf-scaling-device-892', 'netconf-scaling-device-455', 'netconf-scaling-device-258', 'netconf-scaling-device-699', 'netconf-scaling-device-51', 'netconf-scaling-device-276', 'netconf-scaling-device-512', 'netconf-scaling-device-682', 'netconf-scaling-device-968', 'netconf-scaling-device-550', 'netconf-scaling-device-435', 'netconf-scaling-device-42', 'netconf-scaling-device-458', 'netconf-scaling-device-298', 'netconf-scaling-device-898', 'netconf-scaling-device-926', 'netconf-scaling-device-1', 'netconf-scaling-device-181', 'netconf-scaling-device-161', 'netconf-scaling-device-476', 'netconf-scaling-device-826', 'netconf-scaling-device-741', 'netconf-scaling-device-665', 'netconf-scaling-device-236', 'netconf-scaling-device-666', 'netconf-scaling-device-294', 'netconf-scaling-device-140', 'netconf-scaling-device-561', 'netconf-scaling-device-37', 'netconf-scaling-device-494', 'netconf-scaling-device-833', 'netconf-scaling-device-951', 'netconf-scaling-device-465', 'netconf-scaling-device-373', 'netconf-scaling-device-993', 'netconf-scaling-device-80', 'netconf-scaling-device-761', 'netconf-scaling-device-957', 'netconf-scaling-device-53', 'netconf-scaling-device-65', 'netconf-scaling-device-291', 'netconf-scaling-device-526', 'netconf-scaling-device-284', 'netconf-scaling-device-190', 'netconf-scaling-device-566', 'netconf-scaling-device-228', 'netconf-scaling-device-149', 'netconf-scaling-device-176', 'netconf-scaling-device-615', 'netconf-scaling-device-846'} to connect</status>
</for>
<kw name="Run Keywords" owner="BuiltIn" type="TEARDOWN">
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-16T00:47:15.868948" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-16T00:47:15.868593" elapsed="0.000384"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-08-16T00:47:15.869129" elapsed="0.000313"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-08-16T00:47:15.868291" elapsed="0.001234"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-16T00:47:16.436613" level="INFO">[?2004l^C[?2004h[jenkins@releng-59795-54-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-08-16T00:47:15.869696" elapsed="0.567126"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-08-16T00:47:16.565302" level="INFO">'testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log' -&gt; '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log'</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-08-16T00:47:16.437150" elapsed="0.128400"/>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="PASS" start="2026-08-16T00:47:15.867914" elapsed="0.697874"/>
</kw>
<kw name="Collect_Data_Points">
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-08-16T00:47:16.568305" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv&lt;/a&gt;'.</msg>
<arg>${DEVICES_RESULT_FILE}</arg>
<arg>Max Devices\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-08-16T00:47:16.567521" elapsed="0.000918"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-08-16T00:47:16.569511" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv"&gt;/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/devices.csv&lt;/a&gt;'.</msg>
<arg>${DEVICES_RESULT_FILE}</arg>
<arg>${devices}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-08-16T00:47:16.568890" elapsed="0.000748"/>
</kw>
<arg>${maximum_devices}</arg>
<doc>Parse and Log relevant information when Scale test finishes</doc>
<status status="PASS" start="2026-08-16T00:47:16.566377" elapsed="0.003501"/>
</kw>
<arg>NetconfKeywords.Stop_Testtool</arg>
<arg>AND</arg>
<arg>Collect_Data_Points</arg>
<arg>${maximum_devices}</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-08-16T00:47:15.866633" elapsed="0.703375"/>
</kw>
<doc>Find max number of switches starting from ${MIN_SWITCHES} till reaching ${MAX_SWITCHES} in steps of ${STEP_SWITCHES}</doc>
<status status="FAIL" start="2026-08-15T23:50:13.273678" elapsed="3423.296463">Timed out waiting for {'netconf-scaling-device-471', 'netconf-scaling-device-129', 'netconf-scaling-device-166', 'netconf-scaling-device-560', 'netconf-scaling-device-936', 'netconf-scaling-device-335', 'netconf-scaling-device-17', 'netconf-scaling-device-462', 'netconf-scaling-device-908', 'netconf-scaling-device-14', 'netconf-scaling-device-513', 'netconf-scaling-device-93', 'netconf-scaling-device-360', 'netconf-scaling-device-838', 'netconf-scaling-device-535', 'netconf-scaling-device-439', 'netconf-scaling-device-183', 'netconf-scaling-device-208', 'netconf-scaling-device-977', 'netconf-scaling-device-390', 'netconf-scaling-device-563', 'netconf-scaling-device-231', 'netconf-scaling-device-32', 'netconf-scaling-device-352', 'netconf-scaling-device-750', 'netconf-scaling-device-808', 'netconf-scaling-device-820', 'netconf-scaling-device-19', 'netconf-scaling-device-342', 'netconf-scaling-device-720', 'netconf-scaling-device-913', 'netconf-scaling-device-272', 'netconf-scaling-device-39', 'netconf-scaling-device-595', 'netconf-scaling-device-185', 'netconf-scaling-device-502', 'netconf-scaling-device-520', 'netconf-scaling-device-71', 'netconf-scaling-device-375', 'netconf-scaling-device-399', 'netconf-scaling-device-207', 'netconf-scaling-device-721', 'netconf-scaling-device-821', 'netconf-scaling-device-899', 'netconf-scaling-device-460', 'netconf-scaling-device-419', 'netconf-scaling-device-43', 'netconf-scaling-device-106', 'netconf-scaling-device-192', 'netconf-scaling-device-401', 'netconf-scaling-device-904', 'netconf-sca...
    [ Message content over the limit has been removed. ]
...onf-scaling-device-679', 'netconf-scaling-device-705', 'netconf-scaling-device-892', 'netconf-scaling-device-455', 'netconf-scaling-device-258', 'netconf-scaling-device-699', 'netconf-scaling-device-51', 'netconf-scaling-device-276', 'netconf-scaling-device-512', 'netconf-scaling-device-682', 'netconf-scaling-device-968', 'netconf-scaling-device-550', 'netconf-scaling-device-435', 'netconf-scaling-device-42', 'netconf-scaling-device-458', 'netconf-scaling-device-298', 'netconf-scaling-device-898', 'netconf-scaling-device-926', 'netconf-scaling-device-1', 'netconf-scaling-device-181', 'netconf-scaling-device-161', 'netconf-scaling-device-476', 'netconf-scaling-device-826', 'netconf-scaling-device-741', 'netconf-scaling-device-665', 'netconf-scaling-device-236', 'netconf-scaling-device-666', 'netconf-scaling-device-294', 'netconf-scaling-device-140', 'netconf-scaling-device-561', 'netconf-scaling-device-37', 'netconf-scaling-device-494', 'netconf-scaling-device-833', 'netconf-scaling-device-951', 'netconf-scaling-device-465', 'netconf-scaling-device-373', 'netconf-scaling-device-993', 'netconf-scaling-device-80', 'netconf-scaling-device-761', 'netconf-scaling-device-957', 'netconf-scaling-device-53', 'netconf-scaling-device-65', 'netconf-scaling-device-291', 'netconf-scaling-device-526', 'netconf-scaling-device-284', 'netconf-scaling-device-190', 'netconf-scaling-device-566', 'netconf-scaling-device-228', 'netconf-scaling-device-149', 'netconf-scaling-device-176', 'netconf-scaling-device-615', 'netconf-scaling-device-846'} to connect</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-16T00:47:16.572867" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-16T00:47:16.572634" elapsed="0.000494"/>
</kw>
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-16T00:47:16.576151" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-16T00:47:16.575410" elapsed="0.000771"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-08-16T00:47:16.576340" elapsed="0.000226"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-08-16T00:47:16.574512" elapsed="0.002126"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-16T00:47:16.578336" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-59795-54-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-08-16T00:47:16.576816" elapsed="0.001587"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-08-16T00:47:16.717135" level="INFO">'testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log' -&gt; '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/testtool--netconf-scale-max-devices-txt-Max-Devices.1786838090.304.log'</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-08-16T00:47:16.578563" elapsed="0.138793"/>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="PASS" start="2026-08-16T00:47:16.573611" elapsed="0.143925"/>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="PASS" start="2026-08-16T00:47:16.572131" elapsed="0.145527"/>
</kw>
<doc>netconf-connector scaling test suite to find max connected devices

Copyright (c) 2019 Lumina Networks, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html


Increasing numbers of netconf devices will be connected and cleaned up
while validating and profiling between each iteration.</doc>
<status status="FAIL" start="2026-08-15T23:50:11.319452" elapsed="3425.398280"/>
</suite>
<status status="FAIL" start="2026-08-15T23:44:06.675940" elapsed="3790.044339"/>
</suite>
<statistics>
<total>
<stat pass="5" fail="2" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="4" fail="0" skip="0">critical</stat>
</tag>
<suite>
<stat name="netconf-scale-max-devices.txt" id="s1" pass="5" fail="2" skip="0">netconf-scale-max-devices.txt</stat>
<stat name="Ready" id="s1-s1" pass="5" fail="1" skip="0">netconf-scale-max-devices.txt.Ready</stat>
<stat name="Netconfready" id="s1-s1-s1" pass="5" fail="1" skip="0">netconf-scale-max-devices.txt.Ready.Netconfready</stat>
<stat name="Max Devices" id="s1-s2" pass="0" fail="1" skip="0">netconf-scale-max-devices.txt.Max Devices</stat>
</suite>
</statistics>
<errors>
<msg time="2026-08-15T23:50:11.334512" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-15T23:50:11.338870" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-15T23:50:11.339392" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-15T23:50:11.348939" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-15T23:50:11.350563" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-15T23:50:11.352524" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-max-devices-only-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-scale-max-devices.txt.Max Devices' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
